Knockoutjs中组件之间的双向绑定

时间:2017-12-18 10:26:35

标签: knockout.js knockout-3.0

我希望创建可重用的组件,我只是无法创建我需要的双向绑定而没有外部库,例如我见过的邮箱子/ pub。

以下是我要做的事情的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 个答案:

答案 0 :(得分:3)

您可以使用params属性传递组件实例的可观察引用,以便读取和写入:

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

在组件的viewmodel函数中,您引用此值而不是创建新的observable:

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

Running example in a fork of your Codepen