1

can.js を使用すると、次のように制御できます。

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);
    }
});

.. そしてこのマークアップ:

<div class="instance1" data-newtext="newtext"></div>
<div class="instance2"></div>

..次に、そのコントロールのインスタンスを次のように作成すると:

var instance1 = new Test_Controller('.instance1', {});
var instance2 = new Test_Controller('.instance2', {});

私が期待するのは、単語がnewtext挿入されnested2た 2 つの div と単語が挿入された 2 つの div ですが、実際に表示されるのは単語がnewtext挿入された 2 つの div です。

ネストを使用しないようにオプション オブジェクトを変更し、すべてのオプションを最上位に配置する場合、問題はありません。

そのため、オプションをデフォルトとマージするときに、canJS がネストされたオブジェクトを正しくマージしていないように見えます。これは事実ですか?分岐せずにこの機能をサポートする方法を知っている人はいますか? それとも、明らかな何かが欠けていますか?これができれば、面倒なオプション作成コードをたくさん書く必要がなくなります。

4

1 に答える 1