Knockout.js 停止嵌套菜单的绑定';s-淘汰赛

Knockout.js 停止嵌套菜单的绑定';s-淘汰赛,knockout.js,Knockout.js,我有一个嵌套菜单,需要绑定到视图中的嵌套div中。我有一个主视图模型,其中包含其他视图模型作为成员。以下是视图模型的定义: ProductMenu = function (name, subProductsMenu1, selectedMenu) { this.productname = ko.observable(name); this.submenu = ko.observableArray(subProductsMenu1); this.selectedProduc

我有一个嵌套菜单,需要绑定到视图中的嵌套div中。我有一个主视图模型,其中包含其他视图模型作为成员。以下是视图模型的定义:

ProductMenu = function (name, subProductsMenu1, selectedMenu) {
    this.productname = ko.observable(name);
    this.submenu = ko.observableArray(subProductsMenu1);
    this.selectedProductName = ko.observable();
};
ProductSubMenu = function () {
    submenuName = ko.observable();
    submenu2 = ko.observableArray([]);
    selectedSubMenuName = ko.observable();
};
ProductSubMenu2 = function () {
    submenu2Name = ko.observable();
    properties = ko.observableArray([]);
    selectedSubMenu2Name = ko.observable();
};
Properties = function () {
    productName = ko.observable();
    shortDesc = ko.observable();
    longDesc = ko.observable();
    additionalDocs = ko.observableArray([]);
};

function MainViewModel() {
    self = this;
    self.productModel = new ProductMenu();
    self.subMenuModel = new ProductSubMenu();
    self.submenu2Model = new ProductSubMenu2();
    self.propertyModel = new Properties();
    self.AllProductsModel = ko.observableArray([]);

    self.ReturnToFamilyProduct = ko.observable(true);
    self.ShowSubMenu = ko.observable(false);
    self.showSubMenu2 = ko.observable(false);
    self.ShowBackBtnOnSubMenuClick = ko.observable(false);
    self.IfDocumentsPresent = ko.observable(true);

    //to add product to products array
    self.AddProducts = function (name, subProductsMenu1, selectedMenu) {
        self.AllProductsModel.push(new ProductMenu(name, subProductsMenu1, selectedMenu));
    };

    self.GetSubFamilyForProducts= function()
    {
        SubProductMenus1 = [];
        data=[{subFam:"test1"}, {subFam:"test2"},{subFam:"test3"}];
        for(var i=0; i< data.length; i++)
        {
            var y= data[i];
            var temp = new ProductSubMenu();
                temp.submenuName = y;
                SubProductMenus1.push(temp);

        }
        self.productModel= new ProductMenu();
        self.productModel.productname= this.productname;
        self.productModel.selectedProductName= this.productname;
        self.productModel.submenu= SubProductMenus1;
        alert(self.AllProductsModel().count);
        ko.utils.arrayForEach(self.AllProductsModel(), function (product) {
                if (product.productname() == this.productname) {
                    product.submenu = SubProductMenus1;
                }
            })
         ko.applyBindings(self.productModel, document.getElementById("subFamilyAccProduct"));
    };
}

 var VM;

$(document).ready(function () {
    console.info(new ProductMenu());
    VM = new MainViewModel();

    ko.applyBindings(VM);

    FetchProductFamiliesForProductsKO();

});

function FetchProductFamiliesForProductsKO() {
    data = [{
        family: "fassm1"
    }, {
        family: "famsss2"
    }];
    for (var i = 0; i < data.length; i++) {
        var x = data[i];

        VM.AddProducts(x.family, null,null);
    }
}
ProductMenu=function(名称、子产品菜单1、selectedMenu){
this.productname=ko.observable(名称);
this.submenu=ko.observatarray(subproductsMinu1);
this.selectedProductName=ko.observable();
};
ProductSubMenu=函数(){
subnumName=ko.observable();
子项2=可观察到的轨道([]);
selectedsubnumName=ko.observable();
};
ProductSubMenu 2=函数(){
subnumu2name=ko.observable();
属性=ko.observearray([]);
selectedSubMenu2Name=ko.observable();
};
属性=函数(){
productName=ko.observable();
shortDesc=ko.可观察();
longDesc=ko.可观察();
附加文档=可观测的ko.Array([]);
};
函数MainViewModel(){
self=这个;
self.productModel=新产品菜单();
self.submonummodel=新产品子菜单();
self.submenu2Model=新产品submenu2();
self.propertyModel=新属性();
self.AllProductsModel=ko.observearray([]);
self.ReturnToFamilyProduct=ko.可观察(真);
self.ShowSubMenu=ko.可观察(假);
self.showsubemun2=可观察的ko(假);
self.showbackptnonsubmenuclick=ko.可观察(false);
self.IfDocumentsPresent=ko.可观察(真);
//将产品添加到产品阵列的步骤
self.AddProducts=函数(名称、子产品编号1、selectedMenu){
self.AllProductsModel.push(新产品菜单(名称、子产品菜单1、selectedMenu));
};
self.GetSubFamilyForProducts=函数()
{
SubProductMenus1=[];
数据=[{subFam:“test1”},{subFam:“test2”},{subFam:“test3”}];
对于(变量i=0;i
查看代码为:

<div id="browseProductDiv" >
    <div id="familyDiv">
      <ul id="productFamilyList" data-bind="foreach: AllProductsModel">
         <li data-bind="click: $root.GetSubFamilyForProducts">
            <a data-bind="text: productname">
               <div data-bind="stopBinding: true">              
                 <div id="subFamilyDiv" data-bind="visible: $root.ShowSubMenu">
                   <div id="subFamilyAccProduct" data-bind="visible: $root.ShowSubMenu">
                     <div data-bind=" foreach: productModel.submenu">
                      <h3 data-bind="attr: { 'id':subMenuName + 'Prod'},text:   subMenuName">                                                  
                      </h3>
                     </div>
                    </div>
                  </div>
               </div>
            </a>
        </li>
     </ul>
   </div>
</div>

  • 提前谢谢。

    请检查此项

    默认情况下,绑定只影响它们所绑定到的元素 应用但是,如果您也想影响所有的后代元素,该怎么办? 这是可能的。你的绑定可以告诉Knockout不要绑定 然后您的自定义绑定就可以做任何事情了 喜欢用不同的方式把它们绑起来

    您也可以检查这些: