2016-06-09 52 views
0

所以我創建了我想同樣的視圖模型中在兩個不同的地方使用,例如滾動條控制: -迪朗達爾:定義同一個視圖模型(對照組)作爲兩個不同的變量

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鏈接到單個服務視圖模型,而不是獨立的視圖模型。我是否正在採取這種正確的方式,還是應該使用別的東西?

+1

define函數沒有實例化你的對象,它只是下載必要的源文件,所以再次重複相同的路徑不會有任何影響。答案取決於您的scroller-nav中的代碼以及它返回的內容,但您可能需要調用該代碼,而不是直接將其設置爲模型。 「{model:mainScrollNav(),...」 –

+0

完全忘了張貼解決方案,但是是現貨。 –

回答

0

的解決方案是不創建視圖模型,但視圖模型等等的功能...

var control = function(){ 
    vm = { 
     // Vars and functions 
    } 
    return vm; 
} 

return control; 

然後視圖模型可以只通過調用傳遞的參考resused多次需要定義參數。他們都獨立工作。

define(['common/viewmodels/controls/scroller-nav'],function(scrollNav)){ 

vm = { 
    mainScroller: new scrollNav(), 
    subPageScroller: new scrollNav() 
} 

return vm;