3

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

例如,当给定时:

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

JSLint 抱怨:

Unexpected '.'.

与 .property() 调用一致。每次出现“.property()”都会发生这种情况,这使得 JSLint 输出充满了“噪音”并且没有完全有用......

4

4 回答 4

3

Ember记录了以下方法来避免函数原型扩展。

代替.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");
})
于 2014-09-05T23:06:28.957 回答
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);
}; 
于 2012-11-15T13:20:23.383 回答
1

目前没有办法配置它。不过,您可以手动更改 jslint。

jslint.js第 3397 行(版本 2013-11-23)附近,您会发现这些行

    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;
于 2014-01-08T13:28:04.960 回答
0

Arne 的解决方案是正确的。但是 JSlint 不会警告你一些东西。而不是注释掉相关行在第 3387 行更改jslint.js

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;
于 2014-08-04T09:27:21.030 回答