Javascript 如何判断模型在模板中是否是新的?
如果我的模型是新的还是现有的,我希望在模板中显示特定的元素 我试图显示Javascript 如何判断模型在模板中是否是新的?,javascript,templates,backbone.js,Javascript,Templates,Backbone.js,如果我的模型是新的还是现有的,我希望在模板中显示特定的元素 我试图显示{{id}},{{cid}和{{isNew}},但它们都是空的 以下是一些例子: // The Model var MyModel = Backbone.Model.extend({}); // In the view var model = new Contact(); this.$el.empty().append(this.template(model.toJSON())); // The template : {{
{{id}}
,{{cid}
和{{isNew}}
,但它们都是空的
以下是一些例子:
// The Model
var MyModel = Backbone.Model.extend({});
// In the view
var model = new Contact();
this.$el.empty().append(this.template(model.toJSON()));
// The template :
{{#if isNew}}New model{{/if}}
如何进行测试?以下是我提出的解决方案:
// The Model
var MyModel = Backbone.Model.extend({
'toJSON': function () {
// Copied from the source
var obj = _.clone(this.attributes);
obj['isNew'] = this.isNew();
return obj;
}
});
当然,这可以确保此模型不具有属性“isNew”;) 需要更多的背景来回答这个问题。您的模型在何处以及如何定义?它是从哪里来的?属性是如何定义的?您使用的是什么模板引擎?我的需求非常简单。我更新了问题,但我怀疑你会在其中找到更多帮助。但这就是为什么我会这样做(我的模型很简单,视图和模板也很简单)。因此,在模板中,我无法知道模型是否是新的。。。我还想知道
是否有效,因为理论上,id只在模型与服务器同步后才存在。这是一个有趣的想法。我认为这取决于您是否在服务器上等待?像这样使用toJSON
的缺点是主干将使用toJSON
为服务器序列化您的模型,而服务器可能不太乐意看到isNew
。我一直倾向于使用一种单独的方法来序列化视图模型,将toJSON
和parse
留给服务器通信,而另一种方法(默认情况下调用toJSON
)留给视图。无论如何,这比寻找id
副作用要干净得多。谢谢你对服务器副作用的提醒,很有趣!你的回答很好,我的评论是供参考的。调整到json
没有什么错,您只需要了解它的双重用途。