【问题标题】:Reload current route's model without Ember Data在没有 Ember 数据的情况下重新加载当前路线的模型
【发布时间】:2014-01-28 13:51:18
【问题描述】:

Ember Data 有一个reload 方法;不过,我正在使用更基本的方法 (using Ember objects) 来提供我的模型。

我希望用户能够通过操作重新加载当前路线的模型,例如单击一个按钮。如果没有 Ember Data,这可能吗?

【问题讨论】:

  • 如果您不使用 ember-data,您可能正在使用 $.getJSON 来获取您的数据。因此,为了再次获取数据,您必须通过路由事件(您可以使用常用方法 DRY)或通过控制器中的特定操作方法以编程方式再次进行相同的 ajax 调用。
  • 你是如何在没有 ember-data 的情况下存储这个状态的?你有一个带reopenClass的模型(在应用程序中全局保存一个数组吗?)
  • @ToranBillups 是的,我正在使用 Ember.Object 和reopenClass 创建一个新方法并从我的路由模型挂钩返回该方法。

标签: ember.js


【解决方案1】:

这是一个非常简单的示例,说明我如何使用您的方法(注意“明确”)。

您可以从您的路由/控制器/其他任何地方调用 clear+find。我还在一些较大的应用程序中为 $.ajax 添加了“beforeSend”(这将在 xhr 解决之前为您调用 clear)

App.Person.reopenClass({
    people: Ember.A([]),
    clear: function() {
        this.people = Ember.A([]);
    },
    add: function(hash) {
        var person = App.Person.create(hash);
        this.people.pushObject(person);
    },
    remove: function(person) {
        this.people.removeObject(person);
    },
    find: function() {
        var self = this;
        $.getJSON('/api/people', function(response) {
            response.forEach(function(hash) {
                var person = App.Person.create(hash);
                Ember.run(self.people, self.people.pushObject, person);
            });
        }, this);
        return this.people;
    }
});

【讨论】:

    【解决方案2】:

    问题在于我正在进行的 AJAX 调用的异步性质。

    这不起作用: this.set('model', App.MyObject.findAll(value));

    我需要允许 AJAX 调用返回响应,然后填充模型:

    var that = this;
    
    App.MyObject.findAll(value).then(function(response) {
      that.set('model', response);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多