首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >can.Control.defaults和选项合并

can.Control.defaults和选项合并
EN

Stack Overflow用户
提问于 2013-09-18 16:58:44
回答 1查看 90关注 0票数 1

使用can.js时,我可以这样控制:

代码语言:javascript
复制
var Test_Controller = can.Control({
    defaults: {
        option1: 'option1',
        option2: 'option2',
        option3: {
            nested1: 'nested1',
            nested2: 'nested2',
            nested3: 'nested3'
        }
    }
}, {
    init: function() {
        if ($(this.element).attr('data-newtext')) {
            this.options.option3.nested2 = $(this.element).data('newtext');
        }

        $(this.element).text(this.options.option3.nested2);
    }
});

。。和这个标记:

代码语言:javascript
复制
<div class="instance1" data-newtext="newtext"></div>
<div class="instance2"></div>

..then如果我像这样创建该控件的实例:

代码语言:javascript
复制
var instance1 = new Test_Controller('.instance1', {});
var instance2 = new Test_Controller('.instance2', {});

我期望看到的是2个div,一个插入了单词newtext,另一个插入了单词nested2,但我实际看到的是插入了单词newtext的2个div。

如果我更改了我的options对象,使其不使用嵌套,而是将所有选项放在顶层,那么我没有问题。

因此,在合并具有默认值的选项时,canJS似乎没有正确地合并嵌套对象。真的是这样吗?有没有人有什么聪明的想法,让我可以在不使用Does的情况下支持这个特性?还是我漏掉了什么明显的东西?如果我能做到这一点,我就不必写很多繁琐的选项创建代码了。

EN

回答 1

Stack Overflow用户

发布于 2013-09-19 04:50:48

正如@tikider所指出的,can.extend使用库的原生.extend (在大多数情况下可能是$.extend),这在默认情况下不会进行深度克隆。但是,您应该能够覆盖控件setup并进行深度扩展:

代码语言:javascript
复制
var Test_Controller = can.Control({
    defaults: {
        option1: 'option1',
        option2: 'option2',
        option3: {
            nested1: 'nested1',
            nested2: 'nested2',
            nested3: 'nested3'
        }
    }
}, {
    setup: function( element, options ) {
        var allOptions = $.extend(true, {}, this.constructor.defaults, options);
        return can.Control.prototype.setup.call(this, element, allOptions);
    },

    init: function() {
        if (this.element.attr('data-newtext')) {
            this.options.option3.nested2 = this.element.data('newtext');
        }

        this.element.text(this.options.option3.nested2);
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18867885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档