2014-11-05 57 views
2

我在Rails中使用主幹。我有一個非常奇怪的行爲,我試圖理解它爲什麼會發生。主幹 - 更好地理解模板

我的模型有一個可選屬性avatar_url。我用它來生成一個img標籤。我得到了以下的html代碼:

<img src="[object HTMLInputElement]" class="avatar-bubble">

當我看着我的代碼,我意識到,我也有這個靜態代碼:

<input id="avatar_url" type="text" class="form-control" />

我的結論是,從某些原因骨幹計算給定變量的值時,也考慮現有的DOm對象。

我想挖掘模板解析器並對其進行調試,以便更好地瞭解它的登錄信息,但無法找到。
我的問題是什麼是使用主幹爲了給模板變量賦值的邏輯。

編輯:
在視圖我實現了一個render方法,執行以下操作:

render: function() { 
    var viewData = this.model.toJSON(); 
    this.$el.html(this.template(viewData)); 
    return this; 
} 
+1

執行摘要:Underscore模板中的值都不是真的可選,您的'toJSON'方法需要在它們返回的對象中提供所有這些值;即使它們的值是'undefined'或'null',它們仍然需要在那裏。 – 2014-11-05 17:54:11

+1

順便說一句,這是一個很好的問題,即使它是重複的。我只知道這是重複的,因爲你發現了DOM問題,當我回答重複時,我記得對它感到困惑。我不知道我是否能夠找到重複的情況。 – 2014-11-05 18:00:19

回答

0

沒有任何骨幹「神奇」來處理和渲染模板。視圖的render方法是a no-op by default,並有一個template方法或屬性是just a recommended convention - 再次,沒有爲您實施,沒有魔法。

有一些框架構建在Backbone之上,就像Marionette一樣,它增加了這種自動功能。如果沒有這些,你必須挖掘你的Rails代碼來弄清楚發生了什麼。因爲Backbone視圖實際上並沒有向DOM添加任何內容,或者解析模板,直到您爲其編寫代碼。

(Backbone視圖提供的唯一一個容器元素是the el,它在實例化時自動生成,但未附加到DOM)。

+0

你說得對,我剛剛編輯了我的問題,並添加了缺少的'render'方法代碼。 – guyaloni 2014-11-05 10:05:57