Durandal:将相同的视图模型(控件)定义为两个不同的变量
Durandal: Defining the same viewmodel (control) as two different variables
所以我创建了一个滚动条控件,我想在同一视图模型中的两个不同位置使用它,例如:-
define(['common/viewmodels/controls/scroller-nav', 'common/viewmodels/controls/scroller-nav'],
function(mainScrollNav, modalScrollNav))
vm = {
activate: activate,
mainScrollControl: ko.observable(null),
modalScrollControl : ko.observable(null)
}
return vm;
function activate() {
vm.mainScrollControl({ model: mainScrollNav, view: 'common/views/controls/mainScroll' });
vm.modalScrollControl({ model: modalScrollNav, view: 'common/views/controls/modalScroll' });
// load up the data that is to be used for each (should be independent)
mainScrollNav.init();
modalScrollNav.init();
}
}
}
控件在填充 mainScrollControl 和 modalScrollControl 的两个实例上加载正常,但是,数据正在共享(修改模态中的滚动条位置,并在主页上修改它),即使控件是单独定义的。似乎 mainScrollNav 和 modalScrollNav link 是单个服务视图模型,而不是独立的视图模型。我是采用这种正确的方法还是应该使用其他方法?
解决方案不是创建视图模型,而是视图模型的函数,所以...
var control = function(){
vm = {
// Vars and functions
}
return vm;
}
return control;
然后只需调用定义参数中传递的引用,即可根据需要多次重新使用视图模型。他们也都独立工作。
define(['common/viewmodels/controls/scroller-nav'],function(scrollNav)){
vm = {
mainScroller: new scrollNav(),
subPageScroller: new scrollNav()
}
return vm;
所以我创建了一个滚动条控件,我想在同一视图模型中的两个不同位置使用它,例如:-
define(['common/viewmodels/controls/scroller-nav', 'common/viewmodels/controls/scroller-nav'],
function(mainScrollNav, modalScrollNav))
vm = {
activate: activate,
mainScrollControl: ko.observable(null),
modalScrollControl : ko.observable(null)
}
return vm;
function activate() {
vm.mainScrollControl({ model: mainScrollNav, view: 'common/views/controls/mainScroll' });
vm.modalScrollControl({ model: modalScrollNav, view: 'common/views/controls/modalScroll' });
// load up the data that is to be used for each (should be independent)
mainScrollNav.init();
modalScrollNav.init();
}
}
}
控件在填充 mainScrollControl 和 modalScrollControl 的两个实例上加载正常,但是,数据正在共享(修改模态中的滚动条位置,并在主页上修改它),即使控件是单独定义的。似乎 mainScrollNav 和 modalScrollNav link 是单个服务视图模型,而不是独立的视图模型。我是采用这种正确的方法还是应该使用其他方法?
解决方案不是创建视图模型,而是视图模型的函数,所以...
var control = function(){
vm = {
// Vars and functions
}
return vm;
}
return control;
然后只需调用定义参数中传递的引用,即可根据需要多次重新使用视图模型。他们也都独立工作。
define(['common/viewmodels/controls/scroller-nav'],function(scrollNav)){
vm = {
mainScroller: new scrollNav(),
subPageScroller: new scrollNav()
}
return vm;