javascript - KnockoutJS - 可以使用 SPA 的父/ subview 模型吗?

标签 javascript knockout.js

我需要知道 KnockoutJS 是否可以支持这样的应用程序结构:主容器 div 已使用 applyBindings 绑定(bind)到某个 View 模型,然后在该 div 内有一个具有自己的 View 模型的子 div,但他们能够相互沟通吗?

 <div id="main">
   <div id="child">

   </div>
 </div>

然后

ko.applyBindings(pageViewModel, document.getElementById('main'));
ko.applyBindings(childViewModel, document.getElementById('child'));

但是“child”中的某个元素能够调用 pageViewModel 而不是 childViewModel 上存在的函数吗?我觉得如果没有这个功能,Knockout 可能不支持完整的水疗设置。这实际上在某种程度上是可能的吗?

最佳答案

ko.components.register('message-editor', {
  viewModel: function(params) {
    this.clickFn = params.clickFunction
  },
  template: '<button data-bind="click:clickFn">Click</button>'
});

vm = {
  fn: function() {
    console.debug("Doing something in the parent");
  },
  fn2: function() {
    console.debug("Also something in the parent");
  }
};
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<h4>First instance, without parameters</h4>
<div data-bind='component: {
                name: "message-editor",
                params: {clickFunction: fn}
                }'></div>

<h4>Second instance, passing parameters</h4>
<div data-bind='component: {
    name: "message-editor",
    params: { clickFunction: fn2 }
}'></div>

是的,您正在寻找components 。主视图模型可以引入任意数量的组件并向它们传递 View 模型的值,包括在主视图模型上操作的可观察对象或函数。

关于javascript - KnockoutJS - 可以使用 SPA 的父/ subview 模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33985783/

相关文章:

javascript - 设置 var 成功

javascript - 关于独立于浏览器的多列文本段落花的问题。 (适用于 IE8 IE9)

javascript - 低于一定宽度时 float 的 div 与未 float 的 div 重叠

javascript - KnockOut 货币绑定(bind)处理程序

knockout.js - 在 TypeScript 中 knockout observableArray

javascript - 通过 require.js 加载所有内容时,如何将 Knockout View 模型的一部分传递给组件?

javascript - knockout 没有定义? require js 加载了什么吗?

javascript - Reshape String,每N个字符插入 "\n"

javascript - 在 Fluid foreach 中填充 Javascript 数组

drop-down-menu - knockout : How to add title to options in select