2015-08-09 31 views
0

我在頁面上有兩個Knockout組件,需要進行通信。在頁面上鍊接兩個內部Knockout組件的最佳方式是什麼?

<grid params='pPager: pPager, pGrid: pGrid, pageSize: 5'> 
</grid> 

<div style='float:right;'> 
    <pager params='pPager: pPager, pGrid: pGrid'></pager> 
</div> 

在頁面我有:

viewModel: function (params) { 
       this.pGrid = ko.observable(); 
       this.pPager = ko.observable(); 
      } 

pGrid和pPager都隨參數轉發到電網和尋呼機。 pPager和pGrid是可觀察對象,這意味着每個組件都可以獲取有關創建其他對象的信息。我們不知道哪個組件首先被實例化。

此外,每個組件僅在獲得實例化之後呈現標記。

嘗試 http://jsfiddle.net/SlavkoPar/066kzxjz/

有沒有更好的方式來連接兩個內擊倒成分?

回答

0

似乎沒有理由爲this.myGridthis.myPager創建新的可觀察值;只需使用傳入的可觀察對象:

 this.myGrid = params.pGrid; 
     this.myGrid.subscribe(function (newValue) { 
      Log("Pager takes grid"); 
     }); 

您也可以使用Knockout來記錄textarea。

<textarea id="log" style="float: right;width: 200px; height: 200px;" data-bind="value:logMessages"></textarea> 

其背後的代碼:

var messages = ko.observableArray(); 
var viewModel = { 
    location: ko.observable(), 
    logMessages: ko.computed(function() { 
     return messages().join('\n'); 
    }) 
}; 

我提出的其他修改是定義在H​​TML模板。 http://jsfiddle.net/066kzxjz/4/

+0

好。另一種獲得父組件的方式是: 'ko.bindingHandlers.GridHandler = { init:function(element,valueAccessor,allBindings,viewModel,bindingContext){ viewModel.pContainer = bindingContext ['$ parentContext']。$ component } }' – SlavkoPar

相關問題