2012-05-29 44 views
1

由於某種原因,我不能讓一個foreach結合在它$數據對象的工作結合(knockout.js),我已經張貼在JSfiddle

怪異的代碼對於我的事情是,

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

的作品,這$數據是 '庫布斯'

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

給出了一個JavaScript錯誤消息:

Unable to parse bindings. Message: TypeError: $root.geometries[$data] is undefined; Bindings value: template: { name: 'input-template', foreach: $root.geometries[$data].invoer }

  1. 你能解釋一下爲什麼出現這種情況?
  2. 你能告訴我應該怎麼做,所以錯誤不顯示?
  3. 有沒有辦法做我想用更有效的代碼做什麼?

回答

1

對我來說,你正在與with: dimSelectwith: geoSelect太棘手。爲什麼不直接使用dimSelect()geoSelect()

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

+0

哇,是的,這是我應該做的,謝謝 –

+0

只有這種解決方案的問題是,$ root.geometries [geoSelect()。invoer或.TYPE引發錯誤(和當geoSelect爲空時,通過以下方式解決該問題:http://jsfiddle.net/danieltulp/QRnD2/ –

0

如果您使用$ data,它是一個對象,但不是像'Kubus'這樣的字符串。

你應該像「名」添加新的領域,以「幾何」相加法「getGeometryByName」,在那裏你會做這樣的事情:

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

     return result; 
    } 

而且是很容易,當你用它來了解視圖代碼模型字段直接名稱,而不是有:+ $數據(從自身發展經驗)

相關問題