Javascript Emberjs动态段:加载路由时出错:TypeError{}
我正在努力熟悉这里的动态部分。以下是我想要实现的目标: 当我访问“/#/inventory”时,它将在“inventory”模板中列出库存模型。这是成功的 当我单击单个库存id时,它将访问/#/inventory/1,因为1是库存id,它将启动“库存”模板。这也是成功的 但是,当我试图直接从地址栏访问/#/inventory/1时,当我按F5时,会出现以下错误-Javascript Emberjs动态段:加载路由时出错:TypeError{},javascript,ember.js,Javascript,Ember.js,我正在努力熟悉这里的动态部分。以下是我想要实现的目标: 当我访问“/#/inventory”时,它将在“inventory”模板中列出库存模型。这是成功的 当我单击单个库存id时,它将访问/#/inventory/1,因为1是库存id,它将启动“库存”模板。这也是成功的 但是,当我试图直接从地址栏访问/#/inventory/1时,当我按F5时,会出现以下错误-加载路由时出错:TypeError{} 错误的完整列表: Uncaught TypeError: Object function ()
加载路由时出错:TypeError{}
错误的完整列表:
Uncaught TypeError: Object function () {
if (!wasApplied) {
Class.proto(); // prepare prototype...
}
o_defineProperty(this, GUID_KEY, undefinedDescriptor);
o_defineProperty(this, '_super', undefinedDescriptor);
var m = meta(this);
m.proto = this;
if (initMixins) {
// capture locally so we can clear the closed over variable
var mixins = initMixins;
initMixins = null;
this.reopen.apply(this, mixins);
}
if (initProperties) {
// capture locally so we can clear the closed over variable
var props = initProperties;
initProperties = null;
var concatenatedProperties = this.concatenatedProperties;
for (var i = 0, l = props.length; i < l; i++) {
var properties = props[i];
Ember.assert("Ember.Object.create no longer supports mixing in other definitions, use createWithMixins instead.", !(properties instanceof Ember.Mixin));
for (var keyName in properties) {
if (!properties.hasOwnProperty(keyName)) { continue; }
var value = properties[keyName],
IS_BINDING = Ember.IS_BINDING;
if (IS_BINDING.test(keyName)) {
var bindings = m.bindings;
if (!bindings) {
bindings = m.bindings = {};
} else if (!m.hasOwnProperty('bindings')) {
bindings = m.bindings = o_create(m.bindings);
}
bindings[keyName] = value;
}
var desc = m.descs[keyName];
Ember.assert("Ember.Object.create no longer supports defining computed properties.", !(value instanceof Ember.ComputedProperty));
Ember.assert("Ember.Object.create no longer supports defining methods that call _super.", !(typeof value === 'function' && value.toString().indexOf('._super') !== -1));
if (concatenatedProperties && indexOf(concatenatedProperties, keyName) >= 0) {
var baseValue = this[keyName];
if (baseValue) {
if ('function' === typeof baseValue.concat) {
value = baseValue.concat(value);
} else {
value = Ember.makeArray(baseValue).concat(value);
}
} else {
value = Ember.makeArray(value);
}
}
if (desc) {
desc.set(this, keyName, value);
} else {
if (typeof this.setUnknownProperty === 'function' && !(keyName in this)) {
this.setUnknownProperty(keyName, value);
} else if (MANDATORY_SETTER) {
Ember.defineProperty(this, keyName, null, value); // setup mandatory setter
} else {
this[keyName] = value;
}
}
}
}
}
finishPartial(this, m);
delete m.proto;
finishChains(this);
this.init.apply(this, arguments);
} has no method 'find'
以下是模板:
<script type="text/x-handlebars">
<h2>{{title}}</h2>
<ul>
<li>{{#linkTo 'inventories'}}Inventories{{/linkTo}}</li>
</ul>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="inventories">
<h2>Inventory</h2>
<table class="table">
<tbody>
{{#each inventory in inventories}}
{{#with inventory}}
<tr>
<td>{{#linkTo 'inventory' inventory}}{{id}}{{/linkTo}}</td>
<td>{{name}}</td>
<td>{{cost}}</td>
<td>{{qty}}</td>
</tr>
{{/with}}
{{/each}}
</tbody>
</table>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="inventory">
<h4>Inventory</h4>
<ul>
<li>{{id}}</li>
<li>{{name}}</li>
<li>{{cost}}</li>
<li>{{qty}}</li>
</ul>
</script>
{{title}}
- {{{#链接到“库存”}库存{{/linkTo}
{{outlet}}
库存
{{#库存中的每个库存}
{{{有库存}
{{{#链接到'库存'库存}{{id}{{{/linkTo}}
{{name}}
{{成本}
{{qty}
{{/与}}
{{/每个}}
{{outlet}}
库存
- {{id}
- {{name}}
- {{成本}
- {{qty}
这是一条毫无帮助的错误消息,但关键部分在它的末尾
this.init.apply(this, arguments);
} has no method 'find'
当您访问/inventory/1
路径时,ember将尝试使用inventory路径
的模型
钩子中的查找该id的记录。在这种情况下,请在清单上查看。因为它找不到那个方法,所以您会得到这个错误
添加一个Inventory.find
方法,返回与参数匹配的记录。Inventory\u id
将解决此问题。不是对OP的回答,而是对所有在2013年9月1日之后出现错误的人来说,这可能是由于将Ember数据更新到最新的1.0版本。所以你必须使用
this.store.find('model');
而不是
App.Model.find();
.如果您的路线缺少模型
方法的参数,则会出现此错误
从链接访问/inventory/1
至但不从URL打开页面时,以下代码有效:
App.InventoryRoute=Ember.Route.extend({
模型:函数(){
this.store.find('inventory',params.inventory\u id)
}
});
添加缺少的参数
修复。此代码既可以从链接到,也可以直接从URL:
App.InventoryRoute=Ember.Route.extend({
型号:功能(参数){
this.store.find('inventory',params.inventory\u id)
}
});
对于余烬数据<0.14,这是代码
App.InventoryRoute=Ember.Route.extend({
型号:功能(参数){
App.Inventory.find(参数Inventory\u id)
}
});
这不是你想要的答案:但我认为这与灰烬路由点击/直接链接不同。当你点击一个链接到/#/inventures/1
时,它将劫持该链接并加载路由。当您转到该URL时,它的行为会有所不同。如果使用RESTful方式命名URL:只需将URL更改为/#/inventory/1
App.Model.find();