2016-03-29 74 views
1

我在互聯網上看到很多關於如何使用淘汰賽js組件顯示數據的例子。 params功能可以很容易地將任何東西傳遞給顯示器。但是我沒有見過如何從組件中獲取數據。從淘汰賽js組件中獲取數據

如何將數據綁定到組件上?

例如:

如果我想要一個自動序列化表單輸入的組件,該怎麼辦?

ko.components.register('form-serializer', { 
    viewModel: function(params){ 
     this.value = ko.observable(); 
     this.name = params.name 

     this.serialize = function(){ 
      return this.name + '=' + this.value(); 
     } 
    }, 
    template: '<input data-bind="textInput: value"/>' 
} 

如何從我的視圖模型調用序列化?

+0

你能舉一個具體的例子來說明你的意思嗎?你可以通過可能屬於「外部」的參數傳遞一個觀察值。 – Alex

+0

我已更新問題以添加示例 – mattNit

+0

序列化應該在哪裏結束?你仍然可以傳入一個帶有參數的可觀察值,而不是將它返回到某個地方。 – Alex

回答

1

將一個對象(通常是可觀察的,但不一定)作爲參數傳遞給組件允許組件和父對象進行讀寫,所以它不是一個方向。你不只是傳遞數據(或不在)。你正在分享資源。

2

您可以使用ko.dataFor來獲取綁定到該組件的視圖模型,然後調用成員函數或變量。但由於某些特殊原因,我不喜歡使用它,因爲它給我提示我的結構有問題。

我更喜歡的另一種方法是將組件的視圖模型放到另一個變量中,以便您可以訪問它。

像:

var formSerializer = function(params){ 
    this.value = ko.observable(); 
    this.name = params.name 

    this.serialize = function(){ 
     return this.name + '=' + this.value(); 
    } 
}; 

var serializer; 
ko.components.register("form-serializer", { 
    template: '<input data-bind="textInput: value"/>', 
    viewModel: { 
     createViewModel: function(params){ 
      serializer = new formSerializer(params); 
      return serializer; 
     } 
    } 
}); 

因此你可以通過serializer.serialize()調用serialize功能。