我遇到问题,我的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"));
})
答案 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());
}
调用处理程序时,Knockout将提供当前模型值作为第一个参数。如果您为集合中的每个项目渲染一些UI,并且您需要知道单击了哪个项目的UI,这将特别有用。