Backbone.js 带模型绑定器的主干嵌套模型
ModelBinder似乎无法与嵌套模型(主干嵌套项目)一起工作…模型的更改不会传播到嵌套元素。更改输入值时,跨度值不会更改…如果用DeepModel替换NestedModel,则可以工作。同样,如果person.name被删除并且模型只有一个级别(lastName和firstName),NestedModel也可以工作Backbone.js 带模型绑定器的主干嵌套模型,backbone.js,coffeescript,Backbone.js,Coffeescript,ModelBinder似乎无法与嵌套模型(主干嵌套项目)一起工作…模型的更改不会传播到嵌套元素。更改输入值时,跨度值不会更改…如果用DeepModel替换NestedModel,则可以工作。同样,如果person.name被删除并且模型只有一个级别(lastName和firstName),NestedModel也可以工作 $ -> 类MyModel扩展了主干.NestedModel 默认值: 人: 姓名: 名字:“鲍勃” 姓氏:“Sass” window.model=新的MyModel For
$ ->
类MyModel扩展了主干.NestedModel
默认值:
人:
姓名:
名字:“鲍勃”
姓氏:“Sass”
window.model=新的MyModel
FormView=Backbone.View.extend
初始化:->
@modelBinder=新主干。modelBinder();
@modelBinder.bind(@model,@el)
el:“#frm”
视图=新表单视图模型:模型
欢迎
编辑您的信息:
我遇到了同样的问题。我发现将Backbone.ModelBinder与结合使用取得了成功。它允许我对嵌套模型使用ModelBinder,并完成您所描述的内容
我以你发布的例子为例,用你的例子制作了一把小提琴。看看它是否回答了你的问题
JavaScript最终看起来如下所示:
var Name=Backbone.AssociatedModel.extend({
默认值:{'firstName':'','lastName':''}
});
var Person=Backbone.AssociatedModel.extend({
默认值:{'name':null},
//为嵌套模型创建一个关系
关系:[{
“类型”:主干,
'键':'名称',
“relatedModel”:名称
}]
});
var MyModel=Backbone.AssociatedModel.extend({
默认值:{'person':null},
//为嵌套模型创建一个关系
关系:[{
“类型”:主干,
“key”:“person”,
“关系模型”:人
}]
});
var FormView=Backbone.View.extend({
el:“#frm”,
初始化:函数(){
这是._modelBinder=new Backbone.modelBinder();
},
render:function(){
var bindingsHash={
“person.name.firstName”:[
{“选择器”:“名字”},
{“选择器”:“[name=firstName]”
],
“person.name.lastName”:[
{'selector':'lastName'},
{“选择器”:“[name=lastName]”
]
};
this._modelBinder.bind(this.model,this.el,bindingsHash);
},
关闭:函数(){
这是。_modelBinder.unbind();
}
});
//创建模型
var modelInfo=新的MyModel({
“人”:{
“姓名”:{
“名字”:“鲍勃”,
“lastName”:“Sass”
}
}
});
//创建视图并进行渲染
var view=newformview({model:modelInfo});
view.render();
<script type='text/coffeescript'>
$ ->
class MyModel extends Backbone.NestedModel
defaults:
person:
name :
firstName: 'Bob'
lastName: 'Sass'
window.model = new MyModel
FormView = Backbone.View.extend
initialize: ->
@modelBinder = new Backbone.ModelBinder();
@modelBinder.bind(@model,@el)
el: '#frm'
view = new FormView model: model
</script>
<body>
<form method="post" action="/test" id='frm'>
<div id="welcome"> Welcome, <span id='person.name.firstName'></span> <span id='person.name.lastName'></span>
<br><br>
Edit your information:
<input type="text" name="person.name.firstName" value="zz"/>
<input type="text" name="person.name.lastName" value="nn"/></div>
</form>