Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Emberjs动态段:加载路由时出错:TypeError{}_Javascript_Ember.js - Fatal编程技术网

Javascript Emberjs动态段:加载路由时出错:TypeError{}

Javascript Emberjs动态段:加载路由时出错:TypeError{},javascript,ember.js,Javascript,Ember.js,我正在努力熟悉这里的动态部分。以下是我想要实现的目标: 当我访问“/#/inventory”时,它将在“inventory”模板中列出库存模型。这是成功的 当我单击单个库存id时,它将访问/#/inventory/1,因为1是库存id,它将启动“库存”模板。这也是成功的 但是,当我试图直接从地址栏访问/#/inventory/1时,当我按F5时,会出现以下错误-加载路由时出错:TypeError{} 错误的完整列表: Uncaught TypeError: Object function ()

我正在努力熟悉这里的动态部分。以下是我想要实现的目标:

当我访问“/#/inventory”时,它将在“inventory”模板中列出库存模型。这是成功的

当我单击单个库存id时,它将访问/#/inventory/1,因为1是库存id,它将启动“库存”模板。这也是成功的

但是,当我试图直接从地址栏访问/#/inventory/1时,当我按F5时,会出现以下错误-
加载路由时出错: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();