Ember:模型没有被模型钩子路径中的商店设置

时间:2016-09-08 10:57:19

标签: ember.js model

所以我正在做的是非常基本的:将模型数据渲染到模板。 设置模型挂钩后,{{model}}对象不会在相应的模板中显示数据。 这是我的代码:

联系(路线):

user: Ember.inject.service('current-user'),

    model: function()
    {
        // var that = this;
        // console.log('whats being returned bitch: ', this.store.findRecord('contact', this.get('user').contactID));
        //return this.store.findRecord('contact', this.get('user').contactID);
        var records = this.store.findRecord('contact', this.get('user').contactID);
        var promise = Ember.RSVP.defer();
        // console.log('promise', promise.resolve());
        // records.addObserver('isLoaded', function() {
        //  // console.log('records.getv', records);

            promise.resolve(records);
        //});
        return promise;
    }, 
    setupController: function(controller)
    {
       // Get the parameters for the current route every time as they might change from one record to another
       var params = this.paramsFor('dashboard.contact');
       console.log('params', params);
       // Set the data in the current instance of the object, this is required. Unless this is done the route will display the same data every time
       this.module = Ember.String.capitalize(params.module);

       this.id = params.id;
       this.data = this.store.find(this.module,this.id);

       // Set the data in the controller so that any data bound in the view can get re-rendered
       controller.set('id',this.id);
       controller.set('model',this.data);
       controller.set('module',this.module);
     }
});

首先我只是尝试this,但它没有显示数据,然后我尝试推迟承诺并解决它(如this),最后我尝试设置控制器(setupController函数)但是由于某些原因para​​ms是空的,因此无法正常工作:/

接触(模板):

<h1> Contact! </h1>
{{#each model as |contact|}}
    <h3>{{contact.name}}</h3>    
    <h3>{{contact.password_c}}</h3>
{{/each}}

接触(模型):

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr('string'),
  password_c: DS.attr('string'),
  birthdate: DS.attr('string'),
  assistant: DS.attr('string'),
  account_name: DS.attr('string'),
  email1: DS.attr('string'),
  facebook: DS.attr('string'),
  phone_home:DS.attr('string')
  // address: Ember.computed('primary_address_street', 'primary_address_state', 
     //     'primary_address_city', 'primary_address_country', function() {
     //    return '${this.get('primary_address_street')} ${this.get('primary_address_state')} ${this.get('primary_address_city')} ${this.get('primary_address_country')}';
    // })
});

请帮忙!

1 个答案:

答案 0 :(得分:0)

我们假设这是你的路由器

// app/router.js
import Ember from 'ember';  

var Router = Ember.Router.extend({  

});

Router.map(function() {  
  this.route('contacts', {path: '/contacts/:contact_id'});
});

export default Router;

和你的模特

// app/models/contact.js

import DS from 'ember-data';

export default DS.Model.extend({  
    name: DS.attr('string'),
    password_c: DS.attr('string'),
});

然后这将是你的contacts.js路由它将扮演一个非常重要的角色,我们将使用Ember Data的findRecord从数据存储中检索单个记录。

// app/routes/contacts.js
import Ember from 'ember';

export default Ember.Route.extend({  
    model(param){
        return this.store.findRecord('contact',param.contact_id);
    }
});

注意:这个参数非常重要。参数从URL传递到模型中。此帖子模型的ID可以通过contact_id访问。它使用该id来查找记录,以便可以返回它。默认情况下,具有相同名称的模板(联系人)可以访问此模型。

这里我们使用Ember Data的findAll。这只是返回后期数据存储中的所有记录。

// app/routes/application.js
import Ember from 'ember';

export default Ember.Route.extend({  
    model() {
        return this.store.findAll('contact');
    }
});

现在

 // app/templates/application.hbs
{{#each model as |contact|}}
    <h3>{{contact.name}}</h3>    
    <h3>{{contact.password_c}}</h3>
{{/each}}

由于我无权查看您的服务以及您的所有代码,因此我尝试简化您返回所有联系方式的方式,以及如何轻松地通过Param。

了解更多信息:https://guides.emberjs.com/v2.7.0/tutorial/ember-data/

您可以按照此代码进行自定义,我希望它可以解决您的问题。

更新:

  

如果您已有用户数据且没问题,请删除{{#each}}   让我们有{{contact.name}},这应该有用,你只需要#each   你有这样的联系方式,如this.store.findAll('contact');或者如果   你在这里必须有{{model.name}},那么模型就是   联系!