2017-12-18 145 views
0

我正在尋找創建可重用組件,我只是無法創建我需要的雙向綁定,而沒有外部庫,比如我見過的郵箱子/ pub。Knockoutjs中組件之間的雙向綁定

這裏是什麼,我試圖做

這是一個非常簡單的例子爲例codepen但它表明我需要什麼。

mainViewModel有一個屬性name,我需要從name-input組件。

我習慣於角度2+和使用雙向綁定,KO有類似的東西嗎?

感謝

史蒂夫

編輯: 的Javascript:

ko.components.register("name-input", { 
    viewModel: function(params) { 
    var self = this; 
    self.userInput = ko.observable(); 
    return self; 
    }, 
    template: "<div><input data-bind='textInput: userInput' placeholder='Enter your name'><br/>Hello,<span data-bind='text:userInput'></span></div>" 
}); 


function mainViewModel() { 
    var self = this; 

    self.name = ko.observable(); 
} 

ko.applyBindings(new mainViewModel(), $("#main")[0]); 

HTML:

<body> 
    <div id="main"> 
    <div id="inner-container"> 
     MyName: 
     <div data-bind="text:name"></div> 
    </div> 
    <name-input></name-input> 
    </div> 
</body> 

回答

1

可以使用params屬性傳遞組件實例可觀察到的參考讀取和寫入:

<name-input params="value: name"></name-input> 

在組件的視圖模型功能,您引用的,而不是創建一個新的觀察到這個值:

function(params) { 
    var self = this; 
    self.userInput = params.value; 
    return self; 
} 

Running example in a fork of your Codepen