13

我似乎无法追踪此错误的来源:

断言失败:找不到“0”的模型

服务器正在获取 JSON,但应用程序在发送到模板之前出错。问题似乎发生在 REST 适配器和路由器之间。当我使用夹具适配器时,模板呈现无错误。

我正在使用 Ember 和 Handlebars 版本 1.0.0。

这是我的应用程序代码:

window.App = Ember.Application.create();

App.ApplicationAdapter = DS.RESTAdapter.extend({
    host: 'http://localhost:3000'
});

App.Router.map(function() {
    this.resource("stories", { path: "/" }, function() {
        this.resource("boards", { path: "/boards"} )
    });
});

App.StoriesRoute = Ember.Route.extend({
    model: function() {
        return this.store.findAll('story');
    }
});

attr = DS.attr;

App.Story = DS.Model.extend({
    color: attr()
});

车把模板

    <script type="text/x-handlebars">
    {{ outlet }}

    </script>

    <script type="text/x-handlebars" data-template-name="stories">
    <ul>
        <li class="storyLine">
            <ul>
                <li id="colorSwatch"></li>
                <li class="board">+</li>
            </ul>
        </li>
    </ul>
    <ul>
    {{#each model}}
        <li class="storyLine">
            <ul>
                <li id="colorSwatch" {{bindAttr class=story.color}}></li>
                <li class="board">dddd</li>
            </ul>
        </li>
    {{/each}}
    </ul>
    </script>

谢谢你的帮助!

4

3 回答 3

25

服务器的响应可能格式不正确。JSON 需要有一个与您的模型同名的根。请参阅:http ://emberjs.com/guides/models/the-rest-adapter/#toc_json-root 您的响应需要如下所示:

{
  "story": [
    {
      "id": 0,
      "title": "foo"
    },
    {
      "id": 1,
      "title": "bar"
    }
  ]
}
于 2013-09-06T05:57:42.220 回答
0

在您bindAttr使用该对象story时,您应该更改您的{{#each}}助手以引用该对象:

...
{{#each story in model}}
  <li class="storyLine">
    <ul>
      <li id="colorSwatch" {{bindAttr class=story.color}}></li>
      <li class="board">dddd</li>
    </ul>
  </li>
{{/each}}
...

希望能帮助到你。

于 2013-09-05T19:50:20.420 回答
0

从扩展转换到扩展时,我遇到了类似的FixtureAdapter错误RESTAdapter。我正在覆盖其中一种finder- 方法。

虽然在那里对FixtureAdapter一系列对象非常满意

findQuery: function(store, type, query, array) {
    return DS.PromiseArray.create({
        promise: new Promise(function(resolve, reject){
            var results = [];
            store.findAll('source').then(function(sources) {
                sources.forEach(
                    function (rootSource) {
                       results.push( store.createRecord( ... ));
                    }
                );
                resolve(results);
            },reject);
        })
    });
}

对于相同的方法,RESTAdapter期望一个以键和数组为值的对象

findQuery: function(store, type, query, array) {
    return new Ember.RSVP.Promise(function(resolve, reject){
        var results = [];
        store.find('source').then(function(sources) {
            sources.forEach(
                function (rootSource) {
                    results.push({ ... });
                }
            );
            resolve({"connections":results});
        },reject);
    });
},

查看调用中的差异resolve

即使像在 中那样将对象放入数组中也可以,这将在稍后尝试更改对象属性时FixtureAdapter导致错误 。Assertion failed: You must use Ember.set() to access this property

对于所有这些,我使用的是 Ember 1.2.0,Ember 数据:1.0.0-beta.7+canary.b45e23ba。

希望这可以帮助...

于 2014-05-28T13:33:14.637 回答