Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js backbonejs model.toJSON和render_Backbone.js_Model_Underscore.js_Bind_Render - Fatal编程技术网

Backbone.js backbonejs model.toJSON和render

Backbone.js backbonejs model.toJSON和render,backbone.js,model,underscore.js,bind,render,Backbone.js,Model,Underscore.js,Bind,Render,我有一些模型,我想在更改时将render方法绑定到它。我试图将model.toJSON传递给渲染器,但它不起作用。不过,如果我在render中传递模型并应用到JSON,它就会工作 整个代码如下: 上面的代码不起作用。如果我改变 this.model.bind('change', _.bind(this.render, this, this.model.toJSON())); 到 及 到 但为什么 更合适的方法是在视图上使用listenTo函数,例如: this.listenTothis.mod

我有一些模型,我想在更改时将render方法绑定到它。我试图将model.toJSON传递给渲染器,但它不起作用。不过,如果我在render中传递模型并应用到JSON,它就会工作

整个代码如下:

上面的代码不起作用。如果我改变

this.model.bind('change', _.bind(this.render, this, this.model.toJSON()));


但为什么

更合适的方法是在视图上使用listenTo函数,例如:


this.listenTothis.model、change、this.render

我认为它没有像你期望的那样工作是因为当你这样做的时候

this.model.bind('change', _.bind(this.render, this, this.model.toJSON()));
传递给render方法的this.model.toJSON参数将始终是调用u.bind时模型的初始状态

当您执行content=this.model.toJSON时;在render方法中,可以获得当前状态,包括触发render的预期更改

您可以这样更好地构建视图:

defaultView=Backbone.View.extend{ 标记名:“节”, 类名:“默认值”, 初始化:函数选项{ 这个。呈现; this.model.on'change',u.bindthis.render,this; }, 模板:\ u.template$'tmpl-default'.html, 活动:{ “模糊[名称=默认输入]”:“eventHandler” }, 渲染:函数{ this.$el.htmlthis.templatethis.model.toJSON; $'content'.htmlthis.$el; 归还这个; }, eventHandler:functionevent{ var val=$event.currentTarget.val; this.model.set'content',val; } };
此外,查看listenTo而不是像@Jayem建议的那样避免意外的内存泄漏问题

想知道答案是否有帮助。。。?
this.model.bind('change', _.bind(this.render, this, this.model));
if (!content) {
    content = this.model.toJSON();
}
if (!content) {
    content = this.model.toJSON();
}else{
    content = content.toJSON();
}
this.model.bind('change', _.bind(this.render, this, this.model.toJSON()));