【问题标题】:Ember data find method on application ready应用程序就绪时的 Ember 数据查找方法
【发布时间】:2013-10-16 01:18:06
【问题描述】:

我正在使用 ember-data 和 rails 作为 API 构建一个 Ember 应用程序。我正在尝试从 application.js 文件中调用 BusinessNotifications 模型的 find 方法。在进行初始调用时,我收到“没有方法'find'”错误。

我的 application.js 文件:

//= require jquery
//= require jquery_ujs
// require jquery.ui.all
//= require handlebars
//= require ember
//= require ember-data
//= require ember-auth
//= require_self
//= require auth
//= require company_backend
//= require ./wepay
//= require_tree .
//= stub polyfills/aight.js
//= stub polyfills/aight.d3.js
//= stub polyfills/mediaqueries.js
//= stub polyfills/pointerevents.js
//= stub polyfills/svg.js

window.CompanyBackend = Em.Application.create({
    ready: function() {
        var BusinessNotifications = CompanyBackend.BusinessNotification.find();
      setInterval(function() {
        BusinessNotifications.reload();
      }, 2000);
    },
});

我的模特:

CompanyBackend.BusinessNotification = DS.Model.extend({
  notification: DS.attr('string'),
  timeSeen: DS.attr('integer'),
  active: DS.attr('boolean'),
  type: DS.attr('string'),
});

我的序列化器:

class BusinessNotificationSerializer < BaseSerializer
  attributes :id, :business_id, :notification, :time_seen, :active, :type
end

我的路线:

CompanyBackend.BusinessNotificationRoute = Em.Route.extend({
  model: function() {
    return CompanyBackend.BusinessNotification.find();
  },
});

我的 router.js:

this.resource('business_notification', { path: '/' });

我在 rails 端设置了控制器和路线,但这些应该是无关紧要的,否则我会在控制台中遇到某种 rails 错误。

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ember.js ember-data


    【解决方案1】:

    出现此问题的原因可能是您使用的是 1.0.0-beta.X 版本。而且您的代码使用的是 v0.14 或 v0.13 api。

    你有两个选择:

    1- 您可以更新您的代码以使用 1.0.0-beta.3,this transition guide 指出所需的更改。您的代码将变为:

    Ember.Application.initializer({
      name: "reload-busisness-notifications",
    
      initialize: function(container, application) {
        var store = container.lookup('store:main')
        var BusinessNotifications = store.find('businessNotification')     
        setInterval(function() {
          BusinessNotifications.update();
        }, 2000);
      }
    });
    

    初始化器不是强制性的,但我认为这是一个好主意,因为您可以访问容器,而无需使用 BusinessNotifications.__container__

    2- 您可以获取 v0.14 版本here,并替换为您当前的。

    【讨论】:

    • 这似乎是一个很好的解决方案。然而,我遇到的问题是在使用 ember-auth 的身份验证请求之前调用了初始化程序。有没有办法将此初始化程序推迟到该请求之后?
    • 您如何使用准备好的应用程序来处理这个问题?我认为你会在应用程序中遇到同样的问题。您能否显示使用 ember-auth 发出身份验证请求的代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2020-02-20
    • 2021-01-15
    • 2013-04-26
    • 2010-10-08
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多