需要js中的交叉引用

时间:2013-06-28 21:22:54

标签: javascript knockout.js requirejs

我遇到问题,我的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"));
})

1 个答案:

答案 0 :(得分: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());   
}

来自documentation

  

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