KnockoutJs学习笔记(八)

本文详细介绍了Knockout.js中withBinding的作用及用法。通过两个实例展示了如何利用withBinding更改bindingcontext,实现数据绑定的局部化,简化绑定路径,并处理复杂的数据结构。此外还介绍了withBinding在不同情况下的行为表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

with binding用于创建一个新的绑定环境(binding context),包含with binding的元素的所有子元素都将处于指定的object的环境限定内。

下面是一个简单的使用with binding的例子:

js部分:

1 var viewModel = {
2     key: "Name",
3     person: {
4         firstName: "Kazusa",
5         lastName: "Touma"
6     }
7 };
8 
9 ko.applyBindings(viewModel);

html部分:

1 <h3 data-bind="text: key"></h3>
2 <p data-bind="with: person">
3     First name: <span data-bind="text: firstName"></span><br />
4     Last name: <span data-bind="text: lastName"></span>
5 </p>

页面显示效果如下:

在上例中,注意到,p元素的子元素内的data-bind都是直接绑定firstName和lastName而无需在前面添加person的前缀,这正是因为我们在p中已经利用with binding将binding context改成了person。

下面是一个更为复杂的例子:

html部分:

 1 <form data-bind="submit: getTweets">
 2     Twitter account:
 3     <input data-bind="value: twitterName" />
 4     <button type="submit">Get tweets</button>
 5 </form>
 6 
 7 <div data-bind="with: resultData">
 8     <h3>Recent tweets fetched at <span data-bind="text: retrievalDate"></span></h3>
 9     <ol data-bind="foreach: topTweets">
10         <li data-bind="text: text"></li>
11     </ol>
12 
13     <button data-bind="click: $parent.clearResults">Clear tweets</button>
14 </div>

js部分:

 1 function MyViewModel() {
 2     var self = this;
 3     self.twitterName = ko.observable("@Kazusa");
 4     self.resultData = ko.observable();
 5 
 6     self.getTweets = function() {
 7         var name = self.twitterName();
 8         var simulatedResults = [
 9             { text: name + ": What a nice day." },
10             { text: name + ": Building some cool apps." },
11             { text: name + ": Just saw a famous celebrity eating lard. Yum." }
12         ];
13         
14         self.resultData({
15             retrievalDate: new Date(),
16             topTweets: simulatedResults
17         });
18     };
19 
20     self.clearResults =  function() {
21         self.resultData(undefined);
22     }
23 }
24 
25 ko.applyBindings(new MyViewModel());

从这里例子中,我们可以看出with binding在使用时的几个特点。当with binding所绑定的binding context为null或是undefined时,包含with binding的元素的所有子元素都将从UI页面中移除。如果我们需要从parent binding context中获取data或是function,我们可以使用特殊的context properties比如说$parent或root,这部分可以参考The binding context

倘若绑定的binding context是一个observable,包含with binding的元素会随着observable的变化而移除现有的子孙元素并添加一系列隶属于新的binding context的子孙元素。

类似的,with binding也提供无容器的控制流语法,这里省略例子,可以参考if binding等。

转载于:https://www.cnblogs.com/charlieyuki/p/3937646.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值