1

我的 requirejs 模块相互引用和交互时遇到问题。

这是示例:jsFiddle

第一个模块将采用第二个模块的值,为什么 requirejs 会这样?


HTML:

<div id="first">
    <input data-bind="value: user.Name" />
    <input data-bind="value: user.Age" />
    <button data-bind="click: editUser">Edit</button>
</div>

<div id="second">
    <input data-bind="value: user.Name" />
    <input data-bind="value: user.Age" />
    <button data-bind="click: saveUser">Save</button>
</div>

JS:

define('vm',
      [
          'vm.edit',
          'vm.save'
          ],
       function(edit,save){
           return{
               save: save,
               edit: edit
           }
       });
define('vm.save',function(){
 var self = this;
    self.user = {
        Name: ko.observable(),
        Age: ko.observable()
    }

    var saveUser = function() {
     alert(self.user.Name() + " is age of " + self.user.Age());   
    }

    return {
        saveUser: saveUser,
        user: user
    }
});

define('vm.edit',function(){
 var self = this;
    self.user = {
        Name: ko.observable(),
        Age: ko.observable()
    }

    var editUser = function() {
     alert(self.user.Name() + " is age of " + self.user.Age());   
    }

    return {
        editUser: editUser,
        user: user
    }
})

require(['vm'],function(vm){
ko.applyBindings(vm.save, document.getElementById("second"));
    ko.applyBindings(vm.edit, document.getElementById("first"));
})
4

1 回答 1

1

这其中的 require.js 部分似乎工作正常。我认为问题在于单击按钮时如何获取对活动对象的引用。如果你做这样的事情,我认为你会得到正确的价值:

var saveUser = function(v) {
 alert(v.user.Name() + " is age of " + v.user.Age());   
}

var editUser = function(v) {
 alert(v.user.Name() + " is age of " + v.user.Age());   
}

文档中:

调用您的处理程序时,Knockout 将提供当前模型值作为第一个参数。如果您正在为集合中的每个项目呈现一些 UI,并且您需要知道单击了哪个项目的 UI,这将特别有用。

于 2013-06-28T21:40:32.947 回答