2010-11-11 27 views
0

Original codeJamieMThomas,一個(真正的好人,誰是試圖微軟JQuery的模板和鏈接合併):JavaScript雜技:如何將對象文字分配給評估屬性?

mapping[binding.field] = { 
    convert: function (value, source, target) { 
     if (binding.converter && binding.converter.convert) { 
      value = binding.converter.convert(value, source, target) 
       if (value === undefined) 
        return; 
     } 
     $(target).attr(attrName, value); 
    } 
}; 

我試圖破解它允許binding.field與像"LPC[0].itemid"字符串(字面字符串工作)。我使用eval作爲一個可怕的選擇,但這是我能做的最快的事情(並且稍後將重寫它)。我最初嘗試將內容分配給eval('')本身,但它不允許我。

eval('(mapping.' + binding.field + ')') = 
    { // rest is the same 
    convert: function (value, source, target) { 
     if (binding.converter && binding.converter.convert) { 
      value = binding.converter.convert(value, source, target) 
       if (value === undefined) 
        return; 
     } 
     $(target).attr(attrName, value); 
    } 
}; 

很明顯,左側的分配無效。我怎麼能做到這一點?

回答

3

你可以把整個指派在eval

eval('mapping.' + binding.field + ' = { ... }'); 

這將是包含函數定義
爲了使串小的非常大的字符串,你可以把函數外部變量:

var converter = function (value, source, target) { 
    if (binding.converter && binding.converter.convert) { 
     value = binding.converter.convert(value, source, target) 
      if (value === undefined) 
       return; 
    } 
    $(target).attr(attrName, value); 
}; 
eval('mapping.' + binding.field + ' = { convert: converter }'); 
相關問題