【问题标题】:Ember 2, model.save() from component my-modal.hbsEmber 2,来自组件 my-modal.hbs 的 model.save()
【发布时间】:2015-09-30 15:45:32
【问题描述】:

我有这个 posts.hbs

{{#each model as |post|}}
    <a href="#" {{action 'openWriteModal' post}}>

      <h3>{{post.title}}</h3>
          {{post.text}}
          {{post.author.name}}
    </a>
{{/each}}

然后我打开我的 write-modal.hbs

{{input value=model.title size="40" escape-press='close'}}

{{model.author.name}}

{{input value=model.text size="70" escape-press='close'}}

<button {{action 'close'}}>Close</button>
<button {{action 'save' model}}>Save</button>

现在,这是我的 components/write-modal.js

export default Ember.Component.extend({

  actions: {

    close: function() {
      return this.sendAction('close');
    },

    save(model) {
        model.set("text", model.get("text"));
        model.save().then(this.sendAction('close'));
    }
  }
});

这里是 posts.js

export default Ember.Route.extend({

    model() {
        return this.store.findAll('post');
    },

  actions: {
    openWriteModal(post) {

      return this.render('modal', {
        outlet: 'modal',
        into: 'application',
        model: this.store.findRecord('post', post.id, { reload: true }),
        controller: 'application'
      });
    },

    closeWriteModal() {

      return this.disconnectOutlet({
        outlet: 'modal',
        parentView: 'application'
      });
    },

    saveWriteModal(model) {

      model.save();
},

......

  model(params) {
    return this.store.query('post', params);
  }

});

在我的 application.hbs 中:

{{outlet}}

{{outlet "modal"}}

最后是 modal.hbs

{{write-modal model=model close='closeWriteModal' save='saveWriteModal'}}

但我收到此错误:“未捕获的类型错误:无法读取未定义的属性‘保存’”

如何解决这个问题?

【问题讨论】:

    标签: javascript ember.js ember-data ember-cli ember.js-2


    【解决方案1】:

    您正在发送“POST”记录作为参数

    {{#each model as |post|}}
        <a href="#" {{action 'openWriteModal' "----post----"}}>  
    
          <h3>{{post.title}}</h3>
              {{post.text}}
              {{post.author.name}}
        </a>
    {{/each}}
    

    这是一张余烬唱片。然后你试图找到完全相同的 POST

    而不是使用(你需要指定“directory/model_name”而不是 DS 记录实例)

     model: this.store.findRecord('post', post.id, { reload: true }), 
    

    使用

    return this.render('modal', {
        outlet: 'modal',
        into: 'application',
        model: post
        controller: 'application'
      });
    

    不确定这是否对您的问题有帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多