2014-11-05 54 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