【问题标题】:Load two emberFire models in one ember.js route在一个 ember.js 路由中加载两个 emberFire 模型
【发布时间】:2014-01-10 03:42:31
【问题描述】:

我正在尝试在一条路线中加载两个模型,但没有任何运气可以解决。一种保存所有信息以动态创建表单的方法,另一种模型是将表单提交数据推送到的模型。以下是我目前掌握的一些内容:

路由器地图

App.Router.map(function() {
    this.route('about');
    this.route('plans');
    this.resource('prices', function() {
        this.resource('price', { path: '/:price_id' });
    });
    this.resource('apply', function() {
        this.resource('getstarted');
        this.resource('addresses');
        this.resource('contacts');
        this.resource('drivers');
        this.resource('equipment');
        this.resource('assign');
    });
});

对于路线我已经尝试了以下所有三个

选项 1

App.GetstartedRoute = Ember.Route.extend({
    model: function(){
        return Ember.Object.create({
            form: function() {
                return EmberFire.Array.create({
                    ref: new Firebase("https://example.firebaseio.com/apply/getstarted")
                 });
             },
            data: function() {
                return EmberFire.Array.create({
                    ref: new Firebase("https://example2.firebaseio.com/companies/-JAY7n7gXJeVbFCCDJdH/carriers/")
                 });
             },
        });
    }
});

选项 2

App.GetstartedRoute = Ember.Route.extend({
    model: function(){
        return Ember.RSVP.hash({
            form: function() {
                return EmberFire.Array.create({
                    ref: new Firebase("https://example.firebaseio.com/apply/getstarted/")
                 });
             },
            data: function() {
                return EmberFire.Array.create({
                    ref: new Firebase("https://example2.firebaseio.com/companies/-JAY7n7gXJeVbFCCDJdH/carriers/")
                 });
            }
        });
    }
});

解决方案选项 3 - 由 kingpin2k 建议

App.GetstartedRoute = Ember.Route.extend({
    model: function(){
        return Ember.Object.create({
            form: EmberFire.Array.create({
                ref: new Firebase("https://moveloaded-ember.firebaseio.com/apply/getstarted/")
            }),
            data: EmberFire.Array.create({
                ref: new Firebase("https://logistek.firebaseio.com/companies/-JAY7n7gXJeVbFCCDJdH/carriers/")
            })
        });
    }
});

FireBase json 入门

{
  "_type" : "object",
  "1" : {
    "type" : "text",
    "placeholder" : "Type it in here...",
    "name" : "carrierName",
    "caption" : "What's the name of your carrier?"
  }
}

表单是通过第一个模型递归创建的,将数据放入生成表单的组件中。我尝试使用以下所有方法访问第一个模型中的 emberFire 数组:

{{model.form.type}} {{form.type}}

{{#each form}}
    {{type}}
{{/each}}

{{#each model.form}}
    {{type}}
{{/each}}

{{#each}}
    {{form.type}}
{{/each}}

但它不起作用......

有什么想法吗?

更新 1:

修复使用了 kingpin2k 建议的选项 3

另外,我必须对我的 GetstartedController 进行以下更改:

来自: App.GetstartedController = Ember.ArrayController.extend

到: App.GetstartedController = Ember.ObjectController.extend

那么访问表单模型就这么简单了:

{{#each form}}
    {{type}}
{{/each}}

【问题讨论】:

    标签: ember.js firebase emberfire


    【解决方案1】:

    查看 firebase 代码,它看起来并没有公开任何承诺(因此 Ember.RSVP.hash 对您没有任何好处)。话虽如此,您实际上只需创建一个包含 2 个字段的哈希并返回它。

    return Ember.Object.create({
      form: EmberFire.Array.create({
              ref: new Firebase("https://example.firebaseio.com/apply/getstarted")
            }),
      data: EmberFire.Array.create({
              ref: new Firebase("https://example2.firebaseio.com/companies/-JAY7n7gXJeVbFCCDJdH/carriers/")
            })
     });
    

    【讨论】:

    • 我尝试过这种方式,但无法访问 EmberFire 阵列...我尝试了以下所有方法:{{model.form.type}}{{form.type}}{{#each form}}{{type}}{{/each}} 和 @ 987654325@
    • 您能否在 emberjs.jsbin.com 上设置一个虚拟示例,我很乐意研究一下。
    • 非常感谢您让我创建一个 jsbin!!!!在为您创建我的应用程序的精简示例版本的过程中,该死的东西与您的解决方案一起工作。问题出在该路由的控制器中......它仍在尝试访问数据,就好像它仍然是常规模型而不是创建的新模型对象一样。解决方法是将App.GetstartedController = Ember.ArrayController.extend 更改为App.GetstartedController = Ember.ObjectController.extend
    • 现在是新问题...您将如何在控制器中创建一个操作以将数据从该表单汇总到模型对象内的数据?这不起作用actions: { addCarrier: function() { this.pushObject(this.get("data.carrierName")); } }
    • 创建一个动作并发送源代码,你完成了 jsbin,即使我可以给你看一个存根的版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2023-03-30
    • 2014-12-02
    • 2015-03-30
    相关资源
    最近更新 更多