在 Ember JS 组件中初始化数组
Initialize Array in Ember JS Component
我是 Ember 的新手,目前正在开发 Ember 的 3.8 版本。我只想在组件文件中初始化一个数组,然后在模板文件中使用该数组。提前致谢。
@mistahenry 建议在初始化函数中初始化数组,如
init() {
this._super(...arguments);
this.set('foo', [{
id: 0,
name: "baz"
}, {
id: 1,
name: "bazzz"
}]);
}
否则 eslint 抛出最新 Ember 3.8.
的错误
在 js 端你可以像这样初始化
import { computed } from '@ember/object';
export default Component.extend({
foo: computed(function() {
return [{id:0,name:"baz"},{id:1,name:"bazzz"}]
}),
...
});
在模板端调用您的变量
{{#each foo as |item|}}
{{item.name}}
{{/each}}
在 Ember 对象(组件是 class 的子组件)上初始化数组的最佳方法是使用 Ember A
助手。这是一个 returns 新可变数组的函数(它在常规 []
之上提供了很多有用的方法。
新语法:
import Component from '@ember/component';
import { A } from '@ember/array';
export default class MyComponent extends Component {
myArray = A()
}
旧语法
export default Component.extend({
myArray: A()
})
为什么这甚至是一个问题?因为当您定义一个组件时,您就是在为该组件定义一个工厂。当需要使用它时,ember returns 该组件的一个新实例 class。 javascript 中的数组是可变的并通过引用存储,因此当您更新该数组,然后创建一个新的组件实例时,数组的新值也会更新。
有关详细信息,请参阅本文:https://dockyard.com/blog/2015/09/18/ember-best-practices-avoid-leaking-state-into-factories
您可以通过在 component/controller 中使用 init
挂钩来创建新的 Ember.NativeArray。
import Component from '@ember/component';
import { A } from '@ember/array';
export default Component.extend({
tagName: 'ul',
classNames: ['pagination'],
init() {
this._super(...arguments);
if (!this.get('content')) {
this.set('content', A());
this.set('otherContent', A([1,2,3]));
}
}
});
我是 Ember 的新手,目前正在开发 Ember 的 3.8 版本。我只想在组件文件中初始化一个数组,然后在模板文件中使用该数组。提前致谢。
@mistahenry 建议在初始化函数中初始化数组,如
init() {
this._super(...arguments);
this.set('foo', [{
id: 0,
name: "baz"
}, {
id: 1,
name: "bazzz"
}]);
}
否则 eslint 抛出最新 Ember 3.8.
的错误在 js 端你可以像这样初始化
import { computed } from '@ember/object';
export default Component.extend({
foo: computed(function() {
return [{id:0,name:"baz"},{id:1,name:"bazzz"}]
}),
...
});
在模板端调用您的变量
{{#each foo as |item|}}
{{item.name}}
{{/each}}
在 Ember 对象(组件是 class 的子组件)上初始化数组的最佳方法是使用 Ember A
助手。这是一个 returns 新可变数组的函数(它在常规 []
之上提供了很多有用的方法。
新语法:
import Component from '@ember/component';
import { A } from '@ember/array';
export default class MyComponent extends Component {
myArray = A()
}
旧语法
export default Component.extend({
myArray: A()
})
为什么这甚至是一个问题?因为当您定义一个组件时,您就是在为该组件定义一个工厂。当需要使用它时,ember returns 该组件的一个新实例 class。 javascript 中的数组是可变的并通过引用存储,因此当您更新该数组,然后创建一个新的组件实例时,数组的新值也会更新。
有关详细信息,请参阅本文:https://dockyard.com/blog/2015/09/18/ember-best-practices-avoid-leaking-state-into-factories
您可以通过在 component/controller 中使用 init
挂钩来创建新的 Ember.NativeArray。
import Component from '@ember/component';
import { A } from '@ember/array';
export default Component.extend({
tagName: 'ul',
classNames: ['pagination'],
init() {
this._super(...arguments);
if (!this.get('content')) {
this.set('content', A());
this.set('otherContent', A([1,2,3]));
}
}
});