2013-02-19 33 views
0

我想動態加載我的主頁上的div的內容,從控制器返回的部分視圖。該div的內容可能會根據用戶在主視圖上點擊哪個按鈕而發生變化。部分視圖有他們自己的挖空viewmodels,我想綁定到div(或部分​​視圖內的子div)。Knockout - 如何在加載部分視圖後在主頁ViewModel上設置子ViewModel屬性

這是我曾嘗試...

我有一個主要淘汰賽視圖模型我的主頁上...

window.mainpage.viewmodel = (function (ko, datacontext) { 
    var self = this; 

    self.someValue = ko.observable("test value"); 
    self.childViewModel = ko.observable(); 

    return { 
     someValue: someValue, 
     childViewModel: childViewModel 
    }; 
})(ko, window.mainpage.datacontext); 

$(document).ready(function() { 
    var viewModel = window.mainpage.viewmodel; 
    ko.applyBindings(viewModel); 
} 

然後我的觀點已經兩個div,一個必然someValue中和另一綁定到childViewModel ....

<div data-bind="text: someValue"></div> 
<div id="subContent" data-bind="with: childViewModel"> 
</div> 

當我點擊窗體上的按鈕,我希望它的「子內容」 div的內容設置爲局部視圖控制器作用的結果...

$('#subContent').load('/Test/GetPage', data, function (response, status, xhr) { 
       //Do something when the partial view is loaded in #subContent 
      }); 

我PartialView有自己的視圖模型,這是我在自己的js文件,它是在局部視圖內聲明宣佈....

window.child.subviewmodel = (function (ko, datacontext) { 
    var self = this; 

    self.someChildValue = ko.observable("test child value"); 

    return { 
     someChildValue: someChildValue 
    }; 

})(ko, window.child.datacontext); 

我的問題是在哪裏創建我的孩子ViewModel以及如何將其分配給主ViewModel上的childViewModel屬性。

另外,我應該怎麼做才能確保每次重新加載子內容時都能正確清除內存使用情況?

任何人都可以提出實現這一目標的最佳方法嗎?

回答

1
  1. 我會建議對緊密耦合您的ViewModels這樣的(引用),並會建議你建立通信信道,而不是使用某種類型的事件聚合器(knockout-postbox爲例)
  2. 只要您的子視圖的DOM已加載,您應該立即創建您的子VM。
  3. ko.cleanNode()是你的朋友
+0

我覺得什麼使棘手對我來說,我的子視圖可以根據當前上下文改變。即在控制器動作中存在確定要返回多個部分視圖中的哪一個的邏輯。我試圖做到這一點,只有這些部分視圖意識到他們自己的視圖模型類型。 – 2013-02-20 11:01:57

+0

因此,當我調用$('#subContent').load時,我不知道要創建哪種類型的視圖模型。 – 2013-02-20 11:03:42

+0

讓子視圖引導它自己的視圖模型。不要忘記,當動態加載視圖片段時,您不僅限於純HTML。 – 2013-02-20 14:45:40

相關問題