在ember模板中,我的model.partners是一个对象数组,我试图迭代并打印所有名称属性,但是我收到一个错误"Cannot redefine property: name"
{{#each partner in model.partners}}
<li>
{{partner.name}}
</li>
{{/each}}
---> I got an error saying "Cannot redefine property: name"
所以我尝试了{{log partner}}
帮助器来查看每个伙伴对象是否正确,它显示正确的对象信息,包括name属性。
{{#each partner in model.partners}}
<li>
{{log partner}}
</li>
{{/each}}
----> This iteration print all information of model.partners correctly
这是我的Ember环境信息。
DEBUG: -------------------------------
DEBUG: Ember : 1.4.0
DEBUG: Ember Data : 1.0.0-beta.7.f87cba88
DEBUG: Handlebars : 1.1.2
DEBUG: jQuery : 2.0.3
DEBUG: -------------------------------
Ember Inspector ($E): Object {userInfo: Object, partners: (...),__ember1395345243022_meta: Meta}
这可能是个问题? 任何帮助将不胜感激。
- 编辑
我只是想知道错误信息的含义&#34;无法重新定义属性:&#34;谁在抱怨这个。
当我使用{{partner.name}}收到错误时,这是来自Ember Inspector的日志,你可以看到Ember.watchKey是堆栈顶部
Transitioned into 'landing' libs.js:6215
Transition #0: TRANSITION COMPLETE. libs.js:6215
Uncaught TypeError: Cannot redefine property: name libs.js:6595
Ember.watchKey libs.js:6595
Ember.watch libs.js:7114
Ember.addObserver libs.js:8386
Ember.View.Ember.CoreView.extend.registerObserver libs.js:27048
simpleBind libs.js:30930
bindHelper libs.js:31030
(anonymous function) libs.js:30978
program1 templates.js:130
prog libs.js:475
Ember.View.Ember.CoreView.extend.render libs.js:26009
Ember.CoreView.Ember.Object.extend._renderToBuffer libs.js:24947
Ember.View.Ember.CoreView.extend._renderToBuffer libs.js:26578
superWrapper
以下日志是我使用{{log partner}}通过控制台成功查看合作伙伴对象时获得的日志,您可以在Ember Inspector中看到7个合作伙伴对象。出于隐私原因,请理解模糊实际名称。
Transitioned into 'landing' libs.js:6215
Transition #0: TRANSITION COMPLETE. libs.js:6215
Object {value: 0, name: "ASM", idx: 0} libs.js:6215
Object {value: 1, name: "Air Force", idx: 1} libs.js:6215
Object {value: 2, name: "Army", idx: 2} libs.js:6215
Object {value: 3, name: "Coast Guard", idx: 3} libs.js:6215
Object {value: 4, name: "Marines", idx: 4} libs.js:6215
Object {value: 5, name: "Navy", idx: 5} libs.js:6215
Object {value: 6, name: "Wives", idx: 6} libs.js:6215
您是否会指导我如何/从何处开始调试此问题?我有足够的时间来帮助我,让我知道你需要的任何帮助。 感谢。
答案 0 :(得分:0)
您是否尝试过编写这样的循环?
{{#each model.partners}}
<li>
{{name}}
</li>
{{/each}}
在每个块的旁边,this
是正在循环的数组中的模型。所以oyu可以写它{{this.name}}
,但是它被提升了,所以它可以删除。
答案 1 :(得分:0)
我终于解决了这个问题。
当我收到错误时,我在模型钩子中使用了以下代码。
model: function() {
return new Ember.RSVP.Promise(function(resolve) {
...
// JSON data from the server
//{"userInfo":{"uid":0,"username":"","isRegistered":0,"email":""}, "partners":[{"value":0,"name":"ASM","idx":0},{"value":1,"name":....}...]}
var retObj = {'userInfo':userInfo,'partners':partners};
resolve(retObj);
...
});
},
我需要做的是在调用the retObj
之前克隆resolve(...)
变量。
有关详细信息,请参阅以下代码。
我认为,这是因为the retObj
对象将the userInfo
变量设为Object
类型而the partners
设置为Array
类型,因此我应该没有直接使用the retObj
。
model: function() {
return new Ember.RSVP.Promise(function(resolve) {
...
// JSON data from the server
//{"userInfo":{"uid":0,"username":"","isRegistered":0,"email":""}, "partners":[{"value":0,"name":"ASM","idx":0},{"value":1,"name":....}...]}
var retObj = {'userInfo':userInfo,'partners':partners};
var newRetObj = jQuery.extend(true, {}, retObj);
resolve(newRetObj);
...
});
},
使用jQuery.extend()克隆retObj解决了错误说&#34; Uncaught TypeError:无法重新定义属性: * &#34;。
再次感谢所有帮助我解决此问题的人。如果您认为我遗漏了某些内容,请随时发表评论。