javascript - 在 emberJS 中运行时生成方法

标签 javascript ember.js ember-data metaprogramming emblem.js

我试图在运行时在 ember 中生成一些方法,我正在尝试的代码是

App.TestController = Ember.ArrayController.extend App.AnotherMixin,

  unsubmitted: Em.computed.filterBy("model", "unsubmitted", true)
  submitted: Em.computed.filterBy("model", "submitted", true)
  canceled: Em.computed.filterBy("model", "canceled", true)
# Rather than using above methods I'm trying to generate them with meta-programming.

  that: @
  defineAttributes: (->
    [
      "unsubmitted"
      "submitted"
      "cancelled"
    ].forEach ( f ) ->
      Em.defineProperty that , f, Em.computed.filterBy("model", f, true)
      return
    return
  ).on("init")

但它不生成方法。那么我有什么遗漏吗?

最佳答案

您正在将 that 定义为 Controller 上的属性,但试图将其用作 defineAttributes 方法中的局部变量。将 that 更改为方法中的局部变量,它应该可以正常工作。或者更好的是,只需使用 Coffeescript 的粗箭头函数来维护 this 的当前值:

defineAttributes: (->
    ['unsubmitted', 'submitted', 'cancelled'].forEach (f) =>
        Em.defineProperty this, f, Em.computed.filterBy('model', f, true)
).on('init')

关于javascript - 在 emberJS 中运行时生成方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27243460/

相关文章:

javascript - 如何使嵌入 View 中的 Ember 组件中的数据绑定(bind)起作用?

node.js - Ember-CLI/Node - node_modules/bower_components 和不可访问互联网的服务器

ember.js - TodoMVC 与 ember,id 不递增

javascript - 使用 Mixins 访问 Ember Controller

javascript - 如何使用 JavaScript 随机生成 HTML 十六进制颜色代码?

javascript - 如何在 Cordova PhoneGap 应用程序中打开设置-> iPhone 的隐私

ember.js - 在路由之间传递参数

ember.js - 过滤 Ember ArrayProxy

javascript - 在 D3 中放大和缩小时如何更改平移和缩放的速度(使用 zoom.on 和 d3.event.translate,d3.event.zoom)?

javascript - 添加一分钟到 hh :mm with JavaScript