1

有没有(更好的)写这个的方法?我正在使用 Dojo。也许混进去会起作用?

  ajaxValidate: function(value, options){

    // Set some defaults
    options.ajaxInvalidMessage = options.ajaxInvalidMessage || "Value not allowed";
    options.ajaxStore = options.ajaxStore || null;
    options.ajaxFilterField = options.ajaxFilterField  || 'name';

似乎没有||=运算符,这对我来说看起来很冗长......

4

2 回答 2

2

你展示的方法:

obj.prop = obj.prop || "default";

...是一个很常见的习语,但我个人觉得 if 语句更具描述性,即使它实际上添加了几个字符:

if (!obj.prop) obj.prop = "default";

如果您想要一种更通用的方法,您可以编写一个类似以下的函数(我不熟悉 Dojo - 也许它已经有这样的函数):

function addDefaults(obj, defaults) {
    for (prop in defaults)
        if (!obj.hasOwnProperty(prop))
            obj[prop] = defaults[prop];
}

然后,您将在代码片段中将其用作:

ajaxValidate: function(value, options){

    addDefaults(options, {
       ajaxInvalidMessage : "Value not allowed",
       ajaxStore : null,
       ajaxFilterField  : 'name'
    });

请注意,addDefaults()我正在使用测试该属性是否存在于您的对象中的hasOwnProperty()方法。这与||您开始测试属性是否“真实”的语法略有不同。

于 2012-08-07T04:37:03.797 回答
1

使用 mixin 是一种更简洁的方法。这样,您还可以将默认值显式分组到单个对象中。

http://dojotoolkit.org/reference-guide/1.7/dojo/mixin.html

ajaxValidate: function (value, options) {
    options = dojo.mixin({
        ajaxInvalidMessage: "Value not allowed",
        ajaxStore: null,
        ajaxFilterField: "name"
    }, options);

    //...
}
于 2012-08-07T04:42:07.397 回答