【问题标题】:Knockoutjs about foreach child parent关于 foreach 子父级的 Knockoutjs
【发布时间】:2013-02-21 15:22:50
【问题描述】:

我有一个模型,其中包含 2 个类型和名称地址等数组,如下所示:

  var model = [{"bstype":1},{"bstype":2},{"bstype":3},{"bstype":4}],
  [{"bstype":1, "name":"John","Address":"Sample address"}, 
  [{"bstype":1, "name":"John","Address":"Sample address"},
  [{"bstype":3, "name":"John","Address":"Sample address"},
  {"bstype":2 ,"name":"John","Address":"Sample address"}];
  [{"bstype":2, "name":"John","Address":"Sample address"},
  [{"bstype":4, "name":"John","Address":"Sample address"}];

我想要它做的是创建一个列表:

类似

   I am not sure about this part how to implement it that is why it was gibberish.
   bstype":1 will have a view of following
     [{"bstype":1, "name":"John","Address":"Sample address"}, 
     [{"bstype":1, "name":"John","Address":"Sample address"},
   bstype"2: will have a view of following
     {"bstype":2 ,"name":"John","Address":"Sample address"}];
     [{"bstype":2, "name":"John","Address":"Sample address"},
   bstype":3 has only one
     [{"bstype":3, "name":"John","Address":"Sample address"},

以此类推。

我正在使用淘汰赛我已经检查了它只讨论了 foreach 但没有讨论如何访问子元素的网站。

我希望这是有道理的。

谢谢

【问题讨论】:

  • 你的例子中的语法没有意义......你已经定义了一个列表,然后是一堆东西。您能否解决此问题,以便我们更清楚地了解您正在处理的内容?

标签: knockout.js knockout-mapping-plugin knockout-2.0 knockout-mvc knockout-sortable


【解决方案1】:

一个帮助方法来组合两个数组,就像你用同一个键完成的那样:

var model = [{"bstype":1},{"bstype":2},{"bstype":3},{"bstype":4}];

var modelChildren = [{"bstype":1, "name":"John","Address":"Sample address"}, 
  {"bstype":1, "name":"John","Address":"Sample address"},
  {"bstype":3, "name":"John","Address":"Sample address"},
  {"bstype":2 ,"name":"John","Address":"Sample address"},
  {"bstype":2, "name":"John","Address":"Sample address"},
  {"bstype":4, "name":"John","Address":"Sample address"}];

这个方法会给你一个新的数组“分组”匹配的bstype:

   var result = model.map(function(elem)
          {
              return { 
                  bstype: elem.bstype,
                  children: modelChildren.filter(function(childElem) { 
                      return childElem.bstype == elem.bstype;
                  })
              };
          });

【讨论】:

  • 这是个好主意,但是我需要什么东西来进行映射,比如使用敲除映射插件?
  • 您可以直接绑定到由上述方法创建的普通 Javascript 对象,但是您是否希望将所有值递归地转换为可观察对象,以便它们注册稍后对它们所做的更改?如果是这种情况,您是对的,Knockout Mappings 插件将为您提供所需的一切。在上述情况下, (ko.mappings.fromJS(result)) 将为您提供一个可观察版本的“结果”,它下面的所有内容都将一直转换为可观察对象。
  • 是的,这就是我想做的。我希望我的模型元素也是可观察的。
【解决方案2】:

我将它们分成两个 var 项,第一个包含第一个数组,第二个包含第二个数组。完成后,我使用第一个数组根据 bstype 循环 4 次。然后使用 $.root.secondarray 遍历第二项。 谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-21
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2011-12-10
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多