Knockout的模板绑定,
模版可以用来方便构建复杂的HTML界面,比如拥有嵌套结构的HTML代码页面。
Knockout有两种方式使用模板:
1.Knockout自带的模板引擎。
2.第三方的模版引擎,比如jQuery.tmpl
Knockout自带模版引擎的参数列表:
data-bind=
"template: { name: 'person-template', data/foreach: buyer,afterRender/afterAdd/beforeRemove}"
name参数就是所对应你定义的模板id,
data参数就是你的模板数据源,指向一个js对象;foreach参数也是,指向一个js对象数组。
afterRender/afterAdd/beforeRemove
这三个,就是事件咯,触发时机看名字,它们回调函数。
第一个例子, 没什么好说
<!
DOCTYPE html
>
< html >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" />
< title >The "template" binding </ title >
< script type ="text/javascript" src ="../jquery-1.7.1.js" ></ script >
< script type ="text/javascript" src ="../knockout-2.0.0.debug.js" ></ script >
< script type ="text/javascript" >
$( function (){
function MyViewModel() {
this .buyer = { name: ' Franklin ' , credits: 250 };
this .seller = { name: ' Mario ' , credits: 5800 };
}
ko.applyBindings( new MyViewModel());
})
</ script >
</ head >
< body >
< h2 >Participants </ h2 >
Here are the participants:
< div data-bind ="template: { name: 'person-template', data: buyer }" ></ div >
< div data-bind ="template: { name: 'person-template', data: seller }" ></ div >
< script type ="text/html" id ="person-template" >
< h3 data - bind = " text: name " >< / h3>
< p > Credits: < span data - bind = " text: credits " >< / span>< / p >
</ script >
</ body >
</ html >
< html >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" />
< title >The "template" binding </ title >
< script type ="text/javascript" src ="../jquery-1.7.1.js" ></ script >
< script type ="text/javascript" src ="../knockout-2.0.0.debug.js" ></ script >
< script type ="text/javascript" >
$( function (){
function MyViewModel() {
this .buyer = { name: ' Franklin ' , credits: 250 };
this .seller = { name: ' Mario ' , credits: 5800 };
}
ko.applyBindings( new MyViewModel());
})
</ script >
</ head >
< body >
< h2 >Participants </ h2 >
Here are the participants:
< div data-bind ="template: { name: 'person-template', data: buyer }" ></ div >
< div data-bind ="template: { name: 'person-template', data: seller }" ></ div >
< script type ="text/html" id ="person-template" >
< h3 data - bind = " text: name " >< / h3>
< p > Credits: < span data - bind = " text: credits " >< / span>< / p >
</ script >
</ body >
</ html >
第二个例子:解释就是,第一个例子用了data参数,第二个例子用了foreach参数
<!
DOCTYPE html
>
< html >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" />
< title >The "template" binding </ title >
< script type ="text/javascript" src ="../jquery-1.7.1.js" ></ script >
< script type ="text/javascript" src ="../knockout-2.0.0.debug.js" ></ script >
< script type ="text/javascript" >
$( function (){
function MyViewModel() {
this .people = [
{ name: ' Franklin ' , credits: 250 },
{ name: ' Mario ' , credits: 5800 }
]
}
ko.applyBindings( new MyViewModel());
})
</ script >
</ head >
< body >
< h2 >Participants </ h2 >
Here are the participants:
< div data-bind ="template: { name: 'person-template', foreach: people }" ></ div >
< script type ="text/html" id ="person-template" >
< h3 data - bind = " text: name " >< / h3>
< p > Credits: < span data - bind = " text: credits " >< / span>< / p >
</ script >
</ body >
</ html >
< html >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" />
< title >The "template" binding </ title >
< script type ="text/javascript" src ="../jquery-1.7.1.js" ></ script >
< script type ="text/javascript" src ="../knockout-2.0.0.debug.js" ></ script >
< script type ="text/javascript" >
$( function (){
function MyViewModel() {
this .people = [
{ name: ' Franklin ' , credits: 250 },
{ name: ' Mario ' , credits: 5800 }
]
}
ko.applyBindings( new MyViewModel());
})
</ script >
</ head >
< body >
< h2 >Participants </ h2 >
Here are the participants:
< div data-bind ="template: { name: 'person-template', foreach: people }" ></ div >
< script type ="text/html" id ="person-template" >
< h3 data - bind = " text: name " >< / h3>
< p > Credits: < span data - bind = " text: credits " >< / span>< / p >
</ script >
</ body >
</ html >
第三个例子:动态选择模板,往name里面传入一个方法,用来筛选用哪个模板
<!
DOCTYPE html
>
< html >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" />
< title >The "template" binding </ title >
< script type ="text/javascript" src ="../jquery-1.7.1.js" ></ script >
< script type ="text/javascript" src ="../knockout-2.0.0.debug.js" ></ script >
< script type ="text/javascript" >
$( function (){
var viewModel = {
employees: ko.observableArray([
{ name: " Kari " , active: ko.observable( true ) },
{ name: " Brynn " , active: ko.observable( false ) },
{ name: " Nora " , active: ko.observable( false ) }
]),
displayMode: function (employee) {
return employee.active() ? " active " : " inactive " ;
}
};
// viewModel.employees()[1].active(true);
ko.applyBindings(viewModel);
})
</ script >
</ head >
< body >
< h2 >Participants </ h2 >
Here are the participants:
< div data-bind ="template: { name: displayMode, foreach: employees }" ></ div >
< script type ="text/html" id ="active" >
active: < span data - bind = " text: name " >< / span>
</ script >
< script type ="text/html" id ="inactive" >
inactive: < span data - bind = " text: name " >< / span>
</ script >
</ body >
</ html >
< html >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" />
< title >The "template" binding </ title >
< script type ="text/javascript" src ="../jquery-1.7.1.js" ></ script >
< script type ="text/javascript" src ="../knockout-2.0.0.debug.js" ></ script >
< script type ="text/javascript" >
$( function (){
var viewModel = {
employees: ko.observableArray([
{ name: " Kari " , active: ko.observable( true ) },
{ name: " Brynn " , active: ko.observable( false ) },
{ name: " Nora " , active: ko.observable( false ) }
]),
displayMode: function (employee) {
return employee.active() ? " active " : " inactive " ;
}
};
// viewModel.employees()[1].active(true);
ko.applyBindings(viewModel);
})
</ script >
</ head >
< body >
< h2 >Participants </ h2 >
Here are the participants:
< div data-bind ="template: { name: displayMode, foreach: employees }" ></ div >
< script type ="text/html" id ="active" >
active: < span data - bind = " text: name " >< / span>
</ script >
< script type ="text/html" id ="inactive" >
inactive: < span data - bind = " text: name " >< / span>
</ script >
</ body >
</ html >
至于如何用第三方模板引擎,比如jQuery.tmpl就不说了。