如何使用foreach绑定(knockout.js)与$ data对象

时间:2012-05-29 07:23:21

标签: foreach knockout.js

由于某些原因我无法使用foreach绑定来处理其中的$ data对象,我已在JSfiddle上发布了代码

对我来说奇怪的是

<div data-bind="template: { name: 'input-template', foreach: $root.geometries['Kubus'].invoer }"></div> 

有效,$ data是'Kubus'

但那

<div data-bind="template: { name: 'input-template', foreach: $root.geometries[$data].invoer }"></div> 

给出了一条javascript错误消息:

  

无法解析绑定。消息:TypeError:$ root.geometries [$ data]   未定义;绑定值:template:{name:'input-template',   foreach:$ root.geometries [$ data] .invoer}

  1. 你能解释一下为什么会这样吗?
  2. 你能告诉我应该怎么做才能显示错误吗?
  3. 有没有办法用更有效的代码做我想做的事情?

2 个答案:

答案 0 :(得分:1)

对我而言,你对with: dimSelectwith: geoSelect过于棘手。为什么不直接使用dimSelect()geoSelect()

http://jsfiddle.net/jearles/PYbzF/12/

答案 1 :(得分:0)

如果您使用$ data,它是一个对象,但不是像'Kubus'这样的字符串。

您应该将“name”之类的新字段添加到“geometry”中,并添加方法“getGeometryByName”,您将执行以下操作:

 self.getGeometryByName = function (geometryName) {
        var result= null;
        $.each(self.geometries(), function (index, value) {
            if (value.name() == geometryName) {
                result= value;
                return false;
            }
        });

        return result;
    }

当您直接按名称使用模型字段而不是使用:+ $ data (来自自己的开发经验)时,更容易理解视图代码