knockout.js
2013-04-25 45 views 1 likes 
1

本質上,我試圖實現RobN極其簡單的使用'模板'數據綁定的模板切換器http://jsfiddle.net/rniemeyer/XYz8M/在Knockout中實現菜單 - 在不同視圖模型之間切換視圖

(---SO wants code here - see fiddle for complete code---) 
    <div id="templateContent" data-bind='template: { name: currentView() }'></div> 

    var viewModel = { 
     currentView: ko.observable("template-1"), 
     toggleView: function() { 
     this.currentView(this.currentView() === "template-1" ? "template-2" : "template-1"); 
    } 
    }; 

    ko.applyBindings(viewModel); 

我已經看到了很多其他簡單的例子,這樣做的,所有正在使用的每個加載模板相同ViewModel類。例外 - RobN的SamplePresentation應用程序(我沒有足夠的代表點來發布另一個鏈接),同時令人印象深刻,我發現很難連接到我的noobie KO體驗。我認爲他在他的section.activate()方法中這樣做了,但是,對我來說還不清楚。

我想在真實應用中使用這個概念,但有綁定上下文問題。這裏是我想要做的事:http://jsfiddle.net/jockor/DSEDh/4/

This line intentionally left blank (please see fiddle vs. mangling code here) 

基本上,當按下導航鏈接/按鈕,我只是想換出主體內容面板另一個模板。該模板需要自己的viewModel支持自己的數據。

上面的小提琴是我在這個概念的簡化版本 - 只是試圖在貓和狗面板之間切換。我遇到的是綁定到'模板'data-bind的數據用於加載的cat/dog模板。

有人可以告訴我,如果我這樣做是否正確,或者如果我濫用'模板'綁定概念?

回答

1

我已修改了的jsfiddle工作:

http://jsfiddle.net/5rmAL/2/

你需要的是切換模板綁定以及的data領域。您只是切換模板名稱,我可以從代碼中看到您正在尋找一種方法來更改視圖模型數據。所以,我粗暴地實現它,以便它在切換名稱時將數據從viewModel切換到viewModel。有更多的優雅的方式來做到這一點,但jsfiddle只是爲了演示。

通過更改data,您可以修改模板指向以獲取其數據的內容。通過做出可觀察的結果,我能夠獲得它指向切換的數據。上面我粗略的實現使用了一個簡單的對象,該對象既包含模板名稱又包含可觀察對象中的數據。由於模板名稱和數據必須同時切換,因此我更新了observable內部對象的值,然後手動告訴observable其值已更改。如果更改模板名稱前的數據,它會嘗試綁定以前的模板。同樣,如果您在數據前更改名稱,它會嘗試將舊數據綁定到新模板。所以,爲了做到這一點,沒有在重新綁定模板時找不到變量和東西,你需要確保你的template綁定不會更新,然後再更改模板的名稱和數據指向。

編輯:我注意到你有一個函數處理函數在你的挖空綁定中傳遞$ data作爲函數的第一個參數。 Knockout總是將$ data作爲第一個參數傳遞給函數,所以我用....goto(... = stuff)替換了function() { ....goto($data); }。這只是一個邊節點(甚至不需要對你的函數簽名進行任何修改)。

+0

謝謝先生,你的確是Los Frijoles!我正在尋找一種使用多個ViewModel的方法,我認爲你已經找到了一個巧妙的方法來做到這一點。我確實嘗試了幾種不同的方式來交換數據,但無法獲得正確的組合。我會在我的應用程序中試試這個,看看我是否遇到了您懷疑可能會等待的時間問題。再次感謝。 – user2003699 2013-04-25 19:10:55

相關問題