Javascript 在初始页面加载后填充时显示绑定元素
在中,我有一个包含2个联系人对象的列表,页面加载时有一个空的活动联系人对象。单击联系人列表下的“激活”链接时,我希望该联系人的属性填充活动联系人输入字段。目前,填充活动的_contact对象的我的函数正在启动,该值已按预期填充,但未显示在页面上(检查元素时,输入字段甚至未显示在代码中) 值得一提的是,这是我第一次使用Knockout,所以完全有可能我遗漏了一些非常基本的东西 守则: HTMLJavascript 在初始页面加载后填充时显示绑定元素,javascript,knockout.js,Javascript,Knockout.js,在中,我有一个包含2个联系人对象的列表,页面加载时有一个空的活动联系人对象。单击联系人列表下的“激活”链接时,我希望该联系人的属性填充活动联系人输入字段。目前,填充活动的_contact对象的我的函数正在启动,该值已按预期填充,但未显示在页面上(检查元素时,输入字段甚至未显示在代码中) 值得一提的是,这是我第一次使用Knockout,所以完全有可能我遗漏了一些非常基本的东西 守则: HTML var initialData=[ {姓:“丹尼”,姓:“拉鲁索”,电话:[ {类型:“手机”,号码:
var initialData=[
{姓:“丹尼”,姓:“拉鲁索”,电话:[
{类型:“手机”,号码:“(555)121-2121”},
{类型:“主页”,编号:“(555)123-4567”}]
},
{姓:“老师”,姓:“宫城”,电话:[
{类型:“手机”,号码:“(555)444-2222”},
{类型:“主页”,编号:“(555)999-1212”}]
}
];
var ContactsModel=功能(触点){
var self=这个;
self.contacts=ko.observearray(ko.utils.arrayMap)(触点,功能(触点){
返回{firstName:contact.firstName,lastName:contact.lastName,phones:ko.observearray(contact.phones)};
}));
self.active_contact=ko.observable();
self.makeActive=函数(名字){
for(self.contacts()中的变量i){
if(self.contacts()[i].firstName==this.firstName){
console.log(self.contacts()[i]);
self.active_contact=self.contacts()[i];
}
}
}
};
ko.应用绑定(新联系人模型(初始数据))代码>
联络
主动联系人:
名字
姓
电话号码
试试这个:
首先,我改变了这一点:
self.active_contact = self.contacts()[i];
为此:
var activeContact = self.contacts()[i];
self.active_contact(activeContact.firstName + " " + activeContact.lastName);
我也是新手,但我的理解是:active\u contact
不是字符串对象;这是一个淘汰的可观测函数。要更改其值,必须调用该函数并传入新值
其次,我更改了您的数据绑定:
<div class="active" data-bind="with: active_contact">
<div data-bind="text: firstName"></div>
</div>
为此:
<p style="font-weight: bold">
Modified Active Contact Binding:
<span data-bind="text: active_contact"></span>
</p>
修改的主动触点绑定:
我还不熟悉绑定的,但是文本
绑定应该很适合您的需要,不是吗?self.makeActive中有两个问题:
.makeActive
不接收名字
,它实际上接收完整的联系人
对象-因此整个for
循环是不必要的,因为您已经拥有了所需的内容
主要问题是:
self.active_contact = self.contacts()[i];
您并没有为可观察对象指定新的值,而是实际替换了可观察对象本身。这就是标记不再更新的原因——它最初绑定到的可观察对象现在不见了
请尝试以下方法:
self.makeActive = function (contact) {
self.active_contact(contact);
};
谢谢你的回答,尼克,这确实解决了我提出的问题,但我在写问题时比自己聪明。我从淘汰文档中改编了一个示例来隔离这个特定问题。在我的实际应用程序中,我需要根据所选对象的各种属性填充多个表单字段。将编辑问题。