Ember从商店获取数据

时间:2014-02-04 15:02:08

标签: ember.js model store

我在Ember中遇到了一个非常基本的问题。我尝试设置一个模型,我从登录中保存了一些信息,然后我想在另一个页面上使用它。

示例:mysite.com/(登录表单)=> mysite / home(主页,我想显示来自/和我的模型的一些信息)

到目前为止我已经这样做了:

在我的App.LoginController中:

var login = this;
        $.ajax({
            url: host,
            type: 'POST',
            data: data,
            accepts: 'application/json',
            success: function(data) {
                login.reset();
                console.log("DEBUG: Login Succeed");
                login.store.push('user', {
                    id: data.session.user.id,
                    username: data.session.user.username,
                    firstname: data.session.user.firstname,
                    lastname: data.session.user.lastname,
                    email: data.session.user.email,
                    domainid: data.session.user.domainid,
                    role: data.session.user.role,
                    status: data.session.user.status
                });
                login.transitionToRoute('home');

在我的模型中:

App.User = DS.Model.extend({
  domainid:   DS.attr('string'),
  email:      DS.attr('string'),
  firstname:  DS.attr('string'),
  lastname:   DS.attr('string'),
  role:       DS.attr('string'),
  status:     DS.attr('string'),
  username:   DS.attr('string')
  fullName: function(){
    return this.get('firstname') + ' ' + this.get('lastname');
  }.property('firstname', 'lastname')
});

在这里我的路由器:

App.Router.map(function() {
    this.resource('login', { path: '/' });
    this.resource('home');
});

App.HomeRoute = Ember.Route.extend({
    model: function() {
        return this.store.find('user');
    }
});

编辑(忘了放我的模板)

<script type="text/x-handlebars" data-template-name="home">
<div class="group-detail">
    <div class="group-label">
        <label>Agent: {{fullName}}</label>
    </div>

    <div class="group-label">
        <label>Account: {{username}}</label>
    </div>

    <div class="group-label">
        <label>Status: {{status}}</label>
    </div>
</div>

<div class="enquiry link">
    {{#link-to 'enquiries'}}Enquiries{{/link-to}}
</div>

我看到我的信息保存在余烬数据中:模型类型:App.User

我有这些错误:

GET http://localhost/users 404 (Not Found)
Error while loading route: undefined 

我想这一定是显而易见的,但我不知道。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我想出了什么,但我认为这不是最漂亮的方式。

对于我的模板,我使用{{#each}}来显示商店中的信息:

<script type="text/x-handlebars" data-template-name="home">
    {{#each}}
    <div class="group-detail">
        <div class="group-label">

            <label>Agent: {{fullName}}</label>

        </div>

        <div class="group-label">
            <label>Account: {{username}}</label>
        </div>

        <div class="group-label">
            <label>Status: {{status}}</label>
        </div>
    </div>
    {{/each}}
    <div class="enquiry link">
        {{#link-to 'enquiries'}}Enquiries{{/link-to}}
    </div>

</script>

对于App.HomeRoute,我使用了store.all(&#39; user&#39;):

App.HomeRoute = Ember.Route.extend({
    model: function() {
        return this.store.all('user');
    }
});

所以...它正在工作,但是有可能从商店中获得唯一的一个用户并且不显示它们吗?

答案 1 :(得分:0)

我知道这个问题已经有几个月了,但我认为这是您修复网页的方法:

在App.LoginController中,执行以下操作:

login.transitionToRoute('home', data.session.user.id);

在路由器中执行:

this.resource('home', { path: ':user_id' });

在你的路线中:

model: function(params) {
    return this.store.find('user', params.user_id);
}

这应该是我相信的伎俩。