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 带模型绑定器的主干嵌套模型_Backbone.js_Coffeescript - Fatal编程技术网

Backbone.js 带模型绑定器的主干嵌套模型

Backbone.js 带模型绑定器的主干嵌套模型,backbone.js,coffeescript,Backbone.js,Coffeescript,ModelBinder似乎无法与嵌套模型(主干嵌套项目)一起工作…模型的更改不会传播到嵌套元素。更改输入值时,跨度值不会更改…如果用DeepModel替换NestedModel,则可以工作。同样,如果person.name被删除并且模型只有一个级别(lastName和firstName),NestedModel也可以工作 $ -> 类MyModel扩展了主干.NestedModel 默认值: 人: 姓名: 名字:“鲍勃” 姓氏:“Sass” window.model=新的MyModel For

ModelBinder似乎无法与嵌套模型(主干嵌套项目)一起工作…模型的更改不会传播到嵌套元素。更改输入值时,跨度值不会更改…如果用DeepModel替换NestedModel,则可以工作。同样,如果person.name被删除并且模型只有一个级别(lastName和firstName),NestedModel也可以工作


$ ->
类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>