ember.js - 将数据从 Ember 组件传递到模型

标签 ember.js ember-cli ember-components

我是 Ember 新手,我正在尝试找出如何最好地使用组件来更改模型。我试图弄清楚我使用的是 Ember 1.13.7 并使用 FixtureAdapter。我有以下代码:

app/models/client.js

import DS from 'ember-data';

export default DS.Model.extend({
    name: DS.attr('string'),
    clientCode: DS.attr('string'),
    vatNr: DS.attr('string'),
    regNr: DS.attr('string'),
    address: DS.attr('string'),
    city: DS.attr('string'),
    postCode: DS.attr('string'),
    country: DS.attr('string'),
    lastViewed: DS.attr('date')
}).reopenClass({
  FIXTURES: [
    { id: 1, name: 'Con', clientCo: 'CON01', lastViewed: new Date("2015-03-25T12:00:00") },
    { id: 2, name: 'Moi', clientCo: 'MOI01', lastViewed: new Date("2015-01-25T12:00:00") },
  ]
});

app/routes/clients.js

import Ember from 'ember';

export default Ember.Route.extend({
    model: function(){
        return this.store.find('client');
    },
    actions: {
        saveClient: function() {
            var model = this.modelFor('clients/show');
            model.save().then(()=> {
                this.transitionTo('clients');
            });
        }
    }
});

app/templates/clients/edit.hbs

<div class="row">
    <div class="col-md-6">
        <form class="form-horizontal">
            {{bootstrap-input model.name "Name"}}
            {{bootstrap-input model.email "Email"}}
            <div class="text-right">
                <button class="btn btn-primary" {{action 'saveClient'}}>Save</button>   
            </div>
        </form>
    </div>
</div>

应用程序/组件/bootstrap-input.js

import Ember from 'ember';

export default Ember.Component.extend({
    positionalParams: ['model', 'label']
});

应用程序/模板/组件/bootstrap-input.hbs

<div class="form-group">
    <label class="col-sm-2 control-label">{{label}}</label>
    <div class="col-sm-10">
        {{input value=model type="text" class="form-control" placeholder=placeholder}}
    </div>
</div>

现在正如您所看到的,更改不会反射(reflect)在正在传递的模型中,因为它是单向绑定(bind)(我认为这就是发生的事情?),或者更确切地说,不直接引用模型。当我不使用positionalParams,并将模型直接传递到组件中时,它工作得很好。例如:

{{bootstrap-input model=model.name label="Name"}}

但据我了解,这不是在 Ember 2 中执行此操作的正确方法。如何将组件中所做的更改获取到模型中,以便将其保存在 route ?

最佳答案

您需要在组件中将属性引用为 attrs.model 而不是 model

See working demo.

关于ember.js - 将数据从 Ember 组件传递到模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32155148/

相关文章:

javascript - Ember 模型示例应用程序

javascript - ember-cli 与 EmbeddedRecordsMixin 不是嵌入式模型

ember.js - Ember : How to get class properties

ember.js - ember-cli 卡在 ember 服务器命令上

javascript - 在 ember-cli 中使用 ID 路由

javascript - Ember.js 2. 使用嵌套模板会消耗更多 RAM 吗?

ember.js - emberjs-2.0 点击时动态添加更多组件

jquery-ui - 我可以将 ember.js 与 jquery-ui Accordion 一起使用吗

javascript - Ember 助手等待 ajax 请求

javascript - 加载完成后删除 renderTemplate ember 路由中的模板