似乎如果骨干模型没有为模板中引用的属性设置默认值,那么它在全局范围内查找? (编辑:我也使用Marionette和Underscore)
我有一个包含以下内容的模板:
<td><@= ((location !== null)?location:'N/A') @></td>
当呈现它时,它会显示页面的URL,包括哈希。我假设它在全局命名空间(Window.location.toString()
)中显示位置。当填充模型的传入JSON字符串未定义location属性且模型没有默认设置时,会发生这种情况。
如果传入数据在键/值对中包含位置属性,则显示该值就好了。
如果传入的数据不包含该属性,但该模型上有默认设置:
myModel = io.models.BaseModel.extend({
defaults: {
location:null,...
然后显示&#34; N / A&#34;正如预期的那样。
我想我的问题是,骨干是如何滚动的 - 如果模型上的属性未定义,那么它是否会查看其他范围?或者这与渲染模板时如何评估位置有关?
我真的很想了解正在发生的事情,所以我更清楚地知道如何以最正确的方式改变事物以防止范围污染。
答案 0 :(得分:0)
我从未见过骨干模型访问全球范围。无论如何,这似乎并没有连接到骨干网,准确地说,它不带有模板引擎。模板通常由下划线处理,我也在我的项目中使用。在那里,我想你传递的模型属性是这样的:
+
这将返回包含所有属性键/值对的对象。然后可以在模板中访问它们,就好像它们已被定义为变量一样。 Underscore不知道模型,它只会访问传递给它的变量。如果没有名为&#34; location&#34;的变量,它将从全局对象&#34; window&#34;中获取它。这是javascript的正常行为。
尝试将模型原样传递给下划线并使用myModel.get(&#34; location&#34;)代替。
答案 1 :(得分:0)
我通过使用@muistooshort描述的variable
模板选项并使用模板中定义的命名空间来解决这个问题。
_.templateSettings = {
variable: "_tdata"
};
-
<td><@= ((location !== null)?_tdata.location:'N/A') @></td>
更新所有模板有点痛苦,但最终工作得很好。似乎应该有一个更简单的实现,比如下划线模板设置中的简单标志。