Sha*_*jad 17 javascript backbone.js underscore.js
仍然学习骨干所以忍受我;
我正在尝试将一个带有空白字段的新模型添加到视图中,但我创建的模板有很多
<input value="<%= some_value %>" type="whatever" />
Run Code Online (Sandbox Code Playgroud)
在获取数据时工作得非常好,它填充它并且一切顺利.当我想要创建一个新的(空白)渲染视图时会出现问题,它给了我
Uncaught ReferenceError: some_value is not defined
Run Code Online (Sandbox Code Playgroud)
我可以设置defaults(我已经为一些在db中有默认值的东西),但这意味着用空格键入40多个; 有没有更好的方法来处理这个?
我正在摆弄下划线模板本身,尝试类似<%= if(some_value != undefined){ some_value } %>但似乎有点麻烦.
jev*_*lio 24
将模板数据传递到包装器对象中.缺少属性访问不会抛出错误:
所以,而不是:
var template = _.template('<%= foo %><%= bar %>');
var model = {foo:'foo'};
var result = template(model); //-> Error
Run Code Online (Sandbox Code Playgroud)
尝试:
var template = _.template('<%= model.foo %><%= model.bar %>');
var model = {foo:'foo'};
var result = template({model:model}); //-> "foo"
Run Code Online (Sandbox Code Playgroud)
小智 12
实际上,您可以arguments在模板内部使用:
<% if(!_.isUndefined(arguments[0].foo)) { %>
...
<% } %>
Run Code Online (Sandbox Code Playgroud)
如果您检查生成的模板函数的源代码,您将看到如下内容:
with (obj||{}) {
...
// model property is used as variable name
...
}
Run Code Online (Sandbox Code Playgroud)
在这里发生什么:首先JS试图找到你的财产在"目标文件",这是模型(更多关于用语句).在"obj"范围中找不到此属性,因此JS遍历全局范围并最终抛出异常.
因此,您可以直接指定范围来修复:
<input value="<%= obj.some_value %>" type="whatever" />
Run Code Online (Sandbox Code Playgroud)
至少它对我有用.