Ember select 视图不理解数组
Ember select view not understanding an Array
我在 ember 运行 和 windows 上遇到了这个奇怪的错误。我正在为 select
复制此代码
inputs.hbs:
<h1>All inputs</h1>
<input id="register-input-1" type="text" placeholder="username">
<form action="">
{{input type="radio" name="type" value="foo" }}Foo<br>
{{input type="radio" name="type" value="bar"}}Bar
{{input type="text" name="type" placeholder="type in here"}}
{{view "select" content=names}}
</form>
控制器:
export default Ember.Controller.extend({
selectedName: 'Tom',
names: ["Yehuda", "Tom"]
});
但是我得到这个错误:
Uncaught Error: Assertion Failed:
The value that #each loops over must be an Array. You passed [Yehuda,Tom]
从这里复制:
http://emberjs.com/api/classes/Ember.Select.html
这是我的依赖关系:
bower:
{
"dependencies": {
"jquery": "^1.11.1",
"ember": "1.11.0",
"ember-data": "1.0.0-beta.16.1",
"ember-resolver": "~0.1.15",
"loader.js": "ember-cli/loader.js#3.2.0",
"ember-cli-shims": "ember-cli/ember-cli-shims#0.0.3",
"ember-cli-test-loader": "ember-cli-test-loader#0.1.3",
"ember-load-initializers": "ember-cli/ember-load-initializers#0.0.2",
"ember-qunit": "0.3.0",
"ember-qunit-notifications": "0.0.7",
"qunit": "~1.17.1"
}
}
包装:
{
"scripts": {
"start": "ember server",
"build": "ember build",
"test": "ember test"
},
"engines": {
"node": ">= 0.10.0"
},
"author": "",
"license": "MIT",
"devDependencies": {
"broccoli-asset-rev": "^2.0.2",
"ember-cli": "0.2.2",
"ember-cli-app-version": "0.3.3",
"ember-cli-content-security-policy": "0.4.0",
"ember-cli-dependency-checker": "0.0.8",
"ember-cli-htmlbars": "0.7.4",
"ember-cli-ic-ajax": "0.1.1",
"ember-cli-inject-live-reload": "^1.3.0",
"ember-cli-qunit": "0.3.9",
"ember-cli-uglify": "1.0.1",
"ember-data": "1.0.0-beta.16.1",
"ember-export-application-global": "^1.0.2",
"ember-disable-prototype-extensions": "^1.0.0"
},
"keywords": [
"ember-addon"
],
"dependencies": {
"ember-cli-babel": "^4.0.0"
},
"ember-addon": {
"configPath": "tests/dummy/config"
}
}
根据我们的评论,您似乎有 prototype extensions disabled。简而言之,Ember.js 扩展了很多内置的全局对象,例如 Array 具有额外的方法。它这样做是为了符合其对象模型和观察者系统所需的 API。但是,Ember 团队意识到并不是每个人都可以修改内置对象,因此他们有理由禁用这些扩展。这样做的缺点是 Ember 仍然需要程序中的所有对象都符合它要求的 API。
这就是 Ember.A()
的用武之地。Ember.A()
采用一个普通的旧 Javascript 数组(尚未启用扩展)并用 EmberNativeArray
包装它.这确保数组符合所需的 API,但不必修改内置数组原型即可。
长话短说,如果禁用原型扩展,则必须在 每个 数组上调用 Ember.A()
Ember在某个时候使用。无论是数组字面量(在您的代码中),还是从第三方库返回的数组,您 必须 在将其提供给 Ember 之前调用 Ember.A(array)
.
我在 ember 运行 和 windows 上遇到了这个奇怪的错误。我正在为 select
复制此代码inputs.hbs:
<h1>All inputs</h1>
<input id="register-input-1" type="text" placeholder="username">
<form action="">
{{input type="radio" name="type" value="foo" }}Foo<br>
{{input type="radio" name="type" value="bar"}}Bar
{{input type="text" name="type" placeholder="type in here"}}
{{view "select" content=names}}
</form>
控制器:
export default Ember.Controller.extend({
selectedName: 'Tom',
names: ["Yehuda", "Tom"]
});
但是我得到这个错误:
Uncaught Error: Assertion Failed:
The value that #each loops over must be an Array. You passed [Yehuda,Tom]
从这里复制: http://emberjs.com/api/classes/Ember.Select.html
这是我的依赖关系:
bower:
{
"dependencies": {
"jquery": "^1.11.1",
"ember": "1.11.0",
"ember-data": "1.0.0-beta.16.1",
"ember-resolver": "~0.1.15",
"loader.js": "ember-cli/loader.js#3.2.0",
"ember-cli-shims": "ember-cli/ember-cli-shims#0.0.3",
"ember-cli-test-loader": "ember-cli-test-loader#0.1.3",
"ember-load-initializers": "ember-cli/ember-load-initializers#0.0.2",
"ember-qunit": "0.3.0",
"ember-qunit-notifications": "0.0.7",
"qunit": "~1.17.1"
}
}
包装:
{
"scripts": {
"start": "ember server",
"build": "ember build",
"test": "ember test"
},
"engines": {
"node": ">= 0.10.0"
},
"author": "",
"license": "MIT",
"devDependencies": {
"broccoli-asset-rev": "^2.0.2",
"ember-cli": "0.2.2",
"ember-cli-app-version": "0.3.3",
"ember-cli-content-security-policy": "0.4.0",
"ember-cli-dependency-checker": "0.0.8",
"ember-cli-htmlbars": "0.7.4",
"ember-cli-ic-ajax": "0.1.1",
"ember-cli-inject-live-reload": "^1.3.0",
"ember-cli-qunit": "0.3.9",
"ember-cli-uglify": "1.0.1",
"ember-data": "1.0.0-beta.16.1",
"ember-export-application-global": "^1.0.2",
"ember-disable-prototype-extensions": "^1.0.0"
},
"keywords": [
"ember-addon"
],
"dependencies": {
"ember-cli-babel": "^4.0.0"
},
"ember-addon": {
"configPath": "tests/dummy/config"
}
}
根据我们的评论,您似乎有 prototype extensions disabled。简而言之,Ember.js 扩展了很多内置的全局对象,例如 Array 具有额外的方法。它这样做是为了符合其对象模型和观察者系统所需的 API。但是,Ember 团队意识到并不是每个人都可以修改内置对象,因此他们有理由禁用这些扩展。这样做的缺点是 Ember 仍然需要程序中的所有对象都符合它要求的 API。
这就是 Ember.A()
的用武之地。Ember.A()
采用一个普通的旧 Javascript 数组(尚未启用扩展)并用 EmberNativeArray
包装它.这确保数组符合所需的 API,但不必修改内置数组原型即可。
长话短说,如果禁用原型扩展,则必须在 每个 数组上调用 Ember.A()
Ember在某个时候使用。无论是数组字面量(在您的代码中),还是从第三方库返回的数组,您 必须 在将其提供给 Ember 之前调用 Ember.A(array)
.