jquery - 多个绑定(bind)(将绑定(bind)添加到已绑定(bind)的父 View 中的分部 View )

标签 jquery html css binding knockout.js

如何将绑定(bind)应用到已经绑定(bind)的父 View 中的局部 View ? 或者找到解决方法来克服上述需求...

我正在使用 asp.net 并且我有一个主视图,它正在使用 knockout ViewModelA 来处理工作人员。页面有很多 div(选项卡),用户可以通过这些选项卡进行导航,并且始终只有一个 ViewModel (ViewModelA)。 ViewModelA 属性填充在 div1div2div3div4 中。简单的html结构是这样的:

<div id="mycontainer">
    <div id="tab1">..<populate viewmodela properties>..</div>
    <div id="tab2">...</div>
    <div id="tab3">...</div>
    <div id="tab4">...</div>
     etc.
</div>


 ko.applyBindings(ViewModelA);

它工作正常,但现在要求发生了变化:我必须将局部 View 插入其中一个 div/选项卡(在 #tab2 内)。此部分 View 使用以下命令加载其自己的 knockout 模型:

 ko.applyBindings(partialViewModel, document.getElementById("partial_view_container"));

在这种情况下,绑定(bind)发生了两次(第一次调用 ViewModelA 绑定(bind)时,第二次是在插入具有自己的绑定(bind)人员的局部 View 时)。这会产生一个错误:“您不能将绑定(bind)多次应用于同一元素”。

我该如何解决这个问题?我知道对于 applyBindings 有第二个参数,它是应该在其中完成绑定(bind)的容器,但在我的例子中,我没有用于 ViewModelA 的容器,因为ViewModelA 填充了不同的 div(选项卡)。

最佳答案

我以前遇到过同样的问题..

我认为您需要构建模型以将其分为四个模型(根据四个选项卡)。但是您的模型实际上是一个模型,因此您需要将它们作为一个模型(这是棘手的部分)。

我们现在研究的是knockout multiple view models on one page ??

在我的应用程序中,我声明了一个 Master/Big/Parent/Container ViewModel,它的全部用途是让我的页面中的每个 View 模型都具有属性(记住四个模型)。

所以现在我页面的每个部分/选项卡都有自己的 ViewModel(可能相同但具有不同的数据/值)并且我有 MasterViewModel 将这些 ViewModel 保存在一个(4 * 1)中.

对于 HTML 部分,为了使您的 html 处理更容易,我强烈建议利用 with binding .

检查 John Papa answer in SO

更新
JS 文件中的示例

function AppMasterViewModel() {
    var self = this;
    self.ViewModelTabOne = new ViewModelTabOne();
    self.ViewModelTabTwo = new ViewModelTabTwo();
    self.ViewModelTabThree = new ViewModelTabThree();
}

对于 HTML

<div id="mycontainer">
    <!-- #mycontainer related to AppMasterViewModel-->
    <div id="tab1" data-bind="with: ViewModelTabOne">
        <!-- #tab1 related to ViewModelTabOne-->
    </div>
    <div id="tab2" data-bind="with: ViewModelTabTwo">
        <!-- #tab1 related to ViewModelTabTwo-->
    </div>
    <div id="tab3" data-bind="with: ViewModelTabThree">
        <!-- #tab1 related to ViewModelTabThree-->
    </div>
</div>

关于jquery - 多个绑定(bind)(将绑定(bind)添加到已绑定(bind)的父 View 中的分部 View ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19953588/

相关文章:

html - 输入类型提交与输入类型文本的 100% 宽度

html - div 中两个元素的 css 宽度为 100%

javascript - 在不同的文件中创建幻灯片

php - Codeigniter 防止重复数据

javascript - 正则表达式在多个尾随 ]]]] 的情况下无法正常工作

javascript - 选中复选框后发布 div/文本

jquery - 表上的 SlideToggle JQuery 无法工作

html - 我有一个 z-index 下拉问题

javascript - 使用 setData ("hai"后 Ckeditor 插件功能不起作用;

jQuery:失去对元素的焦点