0

我没有使用 EmberData,因为我对它不太满意。相反,我正在使用以下方法获取模型$.getJSON

App.Persons = App.Model.extend({
    id : null,
    name : null,
    email : null
});

App.PersonsRoute = Ember.Route.extend({
    model : function() {
        return App.Persons.findAll();
    }
});

App.Persons.reopenClass({
    findAll : function() {
        return $.getJSON("personsjson.php").then(function(response) {
            var s = [];
            $.each(response, function(i, row) {
                return s.pushObject(App.Persons.create(row));
            });

            return s;
        });
    }
});

App.Router.map(function() {
    this.resource('persons', function() {
        this.resource('person', {
            path : '/:person_id'
        });
    });
});

当有人点击使用 LinkTo Helper 的人的姓名时,我想显示电子邮件。所以我创建了一个这样的 Person 路由,

App.PersonRoute = Ember.Route.extend({
    model : function(params) {
        return App.Persons.findBy('id', params.person_id);
    }
});

但是在 url 上,我得到的是“未定义”,而不是最后得到 id。

这是我正在做的 HTML 方面,

            {{#each person in content }}
            <tr><td>
             {{#link-to 'person' this}} <p>{{person.name}}</p>{{/link-to}}
            </td></tr>
            {{/each}}

可能是什么问题?

如果有人感兴趣,我在后端做这个,

SELECT id, name, email FROM persons;
4

1 回答 1

0

问题是这this是对 的引用App.PersonsController,而不是App.Person模型。因此,要完成这项工作,请传递person{{#linkTo}}类似:

{{#each person in content }}
    <tr><td>
    {{#link-to 'person' person}} <p>{{person.name}}</p>{{/link-to}}
    </td></tr>
{{/each}}

- - 更新 - - -

也尝试将模型重命名为 App.Person 而不是 App.Persons

App.Person = App.Model.extend({
    id : null,
    name : null,
    email : null
});

App.PersonsRoute = Ember.Route.extend({
    model : function() {
        return App.Person.findAll();
    }
});

App.Person.reopenClass({
    findAll : function() {
        return $.getJSON("personsjson.php").then(function(response) {
            var s = [];
            $.each(response, function(i, row) {
                return s.pushObject(App.Person.create(row));
            });

            return s;
        });
    }
});
于 2013-09-04T02:57:27.730 回答