鍍金池/ 問(wèn)答/網(wǎng)絡(luò)安全  HTML/ avalon.js中有關(guān)avalon scan局部刷新的問(wèn)題

avalon.js中有關(guān)avalon scan局部刷新的問(wèn)題

1、請(qǐng)問(wèn)avalon.scan的寫法,可否只scan一個(gè)節(jié)點(diǎn)而不是整個(gè)document?在實(shí)際應(yīng)用中,有一些通過(guò)pjax臨時(shí)獲取的html片段,只想scan這一部分節(jié)點(diǎn)而不是整個(gè)body。
2、官網(wǎng)中的例子中時(shí)這么寫的:

avalon.ready(function(){
    avalon.define({
       $id: 'test',
       aaa: 111
    })
    vm.$watch('onReady', function(){
        //頁(yè)面上每個(gè)ms-controller, ms-important元素
        //在其區(qū)域內(nèi)的所有ms-*指令被掃描后會(huì)執(zhí)行
    })
     //2.1.15起支持
    vm.$watch('onDispose', function(){
        delete avalon.vmodels[vm.$id]
        if(avalon.scopes){
           delete avalon.scopes[vm.$id]
        }
    })
    avalon.scan(document.body)
})

3、按照代碼,經(jīng)過(guò)多次測(cè)試,這么寫似乎才生效,例子中的寫法似乎都是不行的:

// 測(cè)試后發(fā)現(xiàn)能生效的寫法:
avalon.scan(document.body, model, avalon.noop());
// model定義
var model = avalon.define({
    $id: 'vm',
    data: {},
    ...
});

4、整個(gè)body進(jìn)行scan很耗資源,也會(huì)影響其他tab頁(yè)面的樣式。求解。

回答
編輯回答
扯不斷

經(jīng)過(guò)搜索,確認(rèn)是如下問(wèn)題,問(wèn)題已經(jīng)圓滿解決:
jQuery中包裹后的DOM對(duì)象實(shí)際上是一個(gè)數(shù)組,要獲得純粹的DOM對(duì)象可以有兩種方式:

1、使用數(shù)組索引方式訪問(wèn),例如:

var dom = $(dom)[0];

如:

$("#id")[0]

2、使用函數(shù)get()訪問(wèn),例如:

var dom = $(dom).get(0);

get()函數(shù)中的參數(shù)為索引號(hào)。

3、改造為如下寫法則局部刷新沒(méi)有任何問(wèn)題:

// jquery  對(duì)象
var $form = $('form[test_form]');
// DOM 節(jié)點(diǎn)
var _dom_test_form = $form.get(0);
// avalon scan
avalon.scan(_dom_test_form, model, avalon.noop());
$form.form({
    // do sth ...
});

測(cè)試成功!

2017年1月3日 04:16