KnockoutJs怎麼樣?
請客觀的說下KnockoutJs的優缺點。
優點:代碼精緻優雅,體積不大,兼容性好
缺點:業務代碼繁瑣,性能一般說實話,knockout是非常好的一個東西,但同時代的競爭對手過於妖孽,AngularJS力挫群雄,重量級的都用它去了,輕量的又用BackBone去了,再輕量的壓根都不用這些東西,所以……
但Knockout後來也還是一直在發展,也有自己的組件化思路,從其定位來看,Vue跟它是最接近的,就是視圖層的組件化MVVM框架,可惜它現在看來已經沒戲了,屬於被拍死在沙灘上的,慘優點:MVVM的思想,雙向綁定。ko有種玩街霸的感覺,寫代碼帶感。
缺點:默認的綁定是內置的,如果要改不靈活。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -所以,自己寫了一個雙向綁定的工具:bindtemplate
可以把結構化的數據雙向綁定到容器的子元素中。以下是一個有任意結構的JSON對象。{
"name":"Jhon",
"parents":["Tom","Jerry"]
}
&
&
&Name:&
&&&
&
&Parents:&
&&&
&&&
&
通常的做法是,用選擇器來確定目標,手動完成賦值和取值操作。
賦值:$("#component").find("&>div:first-child&>span:last-child").html(json.name);
$("#component").find("&>div:last-child&>span:nth-child(1)").html(json.parents[0]);
$("#component").find("&>div:last-child&>span:nth-child(2)").html(json.parents[1]);
取值:
var name=$("#component").find("&>div:first-child&>span:last-child").html();
var father=$("#component").find("&>div:last-child&>span:nth-child(1)").html();
var mother=$("#component").find("&>div:last-child&>span:nth-child(2)").html();
雖然這些賦值和取值操作,可以封裝到組件中,作為公有方法。
但是依然掩蓋不了繁瑣的事實。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
於是,我就借鑒了常用MVVM框架的實現方式,在目標元素上添加自定義標籤,來實現雙向綁定。&
&
&Name:&
&&&
&
&Parents:&
&&&
&&&
&