我怎样才能让JSLint停止抱怨Ember.js“.property()”?

时间:2012-08-13 15:58:43

标签: javascript properties ember.js jslint

如何让JSLint停止在我的模型定义中抱怨Ember.js“.property()”?

,例如,给出时:

isBlah: function() {
    "use strict";
    ...
}.property("foo", "bar").cacheable()

JSLint抱怨:

Unexpected '.'.

在.property()调用的行上。每次出现“.property()”都会发生这种情况,这会使JSLint输出充满“噪音”而不是完全有用......

4 个答案:

答案 0 :(得分:3)

Ember documents以下方法来避免函数原型扩展。

取代 .property(),使用 Ember.computed()

fullName: Ember.computed('firstName', 'lastName', function() {
  return this.get('firstName') + ' ' + this.get('lastName');
})

而不是 .observes(),请使用 Ember.observer()

fullNameDidChange: Ember.observer('fullName', function() {
  console.log("Full name changed");
})

答案 1 :(得分:1)

我的解决方案是将其转换为:

isBlah: Em.property(function() {
    "use strict";
    ...
}, "foo", "bar").cacheable()

我首先添加'属性' Ember的方法(在开始我的应用程序之前):

Em.property = function (func) {
    var params = Array.prototype.slice.call(arguments, 1);
    return Function.prototype.property.apply(func, params);
}; 

答案 2 :(得分:1)

目前无法配置此功能。您可以手动更改jslint。

在第3397行(版本2013-11-23)的jslint.js中,您会找到这些行

    case '.':
        if (peek().string !== 'bind' || peek(1).id !== '(') {
            next_token.warn('unexpected_a');
        }
        break;

注释掉if语句和警告会消失!

    case '.':
        // if (peek().string !== 'bind' || peek(1).id !== '(') {
        //     next_token.warn('unexpected_a');
        // }
        break;

答案 3 :(得分:0)

Arne的解决方案正沿着正确的轨道前进。但JSlint不会警告你一些事情。而不是评论相关的行在jslint.js

的第3387行周围发生变化
case '.':
    if (peek().string !== 'bind' || peek(1).id !== '(') {
        next_token.warn('unexpected_a');
    }
    break;

到此(第2行)

    case '.':
        if (peek().string !== 'bind' && peek().string !== 'property' || peek(1).id !== '(') {
            next_token.warn('unexpected_a');
        }
        break;