Javascript Knockout.js文本将多个属性绑定到单个<;p>;节点
我需要将Javascript Knockout.js文本将多个属性绑定到单个<;p>;节点,javascript,knockout.js,data-binding,Javascript,Knockout.js,Data Binding,我需要将标记绑定到视图模型中的值。 现在通常情况下,这不是问题所在,但在本例中,值在模型中被分成多个字段,因为它是一个地址 因此,我将“streetName”和“HouseNumber”作为单独的字段,但它们都需要在HTML中显示,作为这个标记的一部分 根据knockout.js的: 绑定值可以是单个值、变量或文本,也可以是几乎任何有效的JavaScript表达式 现在我注意到这里的“几乎”,所以我保留了,但是一个简单的字符串连接应该被认为是一个“足够简单的操作”是吗?我需要将我的标记的值绑定到
标记绑定到视图模型中的值。
现在通常情况下,这不是问题所在,但在本例中,值在模型中被分成多个字段,因为它是一个地址
因此,我将“streetName”和“HouseNumber”作为单独的字段,但它们都需要在HTML中显示,作为这个标记的一部分
根据knockout.js的:
绑定值可以是单个值、变量或文本,也可以是几乎任何有效的JavaScript表达式
现在我注意到这里的“几乎”,所以我保留了,但是一个简单的字符串连接应该被认为是一个“足够简单的操作”是吗?我需要将我的
标记的值绑定到模型中两个字符串字段的值,由于我正在尝试的语法不起作用,我将使用什么语法:
顺便说一句,dataBind1和dataBind2并不是那么简单,它是一个嵌套的函数调用,yadda,yadda,yadda,虽然它们在分离时工作得非常好,但我无法让它们在我希望它们在单个元素中“在一起”时工作。实际绑定值为:
编辑(稍微澄清一下viewModel的结构):
视图模型本身是一个JavaScript对象(var viewModel
),它具有某些方法,例如getModelData(ID)、updateModelData(ID)等等。此处传递的ID是页面不同部分的控制器的“唯一控制器标识符”。这里有一些1:1对1:M的木乃伊,但这并不相关。var viewModel
接收来自AJAX调用的信息,并使用附加属性动态更新其自身,根据这些属性,控制器被塞进页面中。因此,它将具有“uniqueID”属性,这实际上是淘汰的视图模型。这样,所有视图模型都保存在单个对象的“接口”下。大概是这样的:
var viewModel = {
uniqueID: object, //knockout.js viewModel of Controller1
uniqueID2: object, //knockout.js viewModel of Controller2
getModelData(processID): function(){
//does stuff
}
}
因此,在本例中,访问getModelData(ID).Property()[0].Street
与访问常规非深嵌套模型中的Property()[0].Street
几乎相同。敲除对象本身的结构类似于:
{
Property: [
{
Street: "someStreet1"
HouseNumber: "someNumber1"
},
{
Street: "someStreet2"
HouseNumber: "someNumber2"
},
{
Street: "someStreet3"
HouseNumber: "someNumber3"
},
]
}
我不知道您是如何拥有视图模型的,但这里是您可以做的
var MainViewModel = function (){
var self = this;
self.Street = ko.observable(getModelData(processID).Property()[0].Street);
self.HouseNum = ko.observable(getModelData(processID).Property()[0].HouseNumber);
self.FullAddress= ko.computed(function () {
return self.Street() + ", " + self.HouseNum();
});
}
HTML
我不知道您是如何拥有视图模型的,但以下是您可以做的
var MainViewModel = function (){
var self = this;
self.Street = ko.observable(getModelData(processID).Property()[0].Street);
self.HouseNum = ko.observable(getModelData(processID).Property()[0].HouseNumber);
self.FullAddress= ko.computed(function () {
return self.Street() + ", " + self.HouseNum();
});
}
HTML
必须发送值、函数(返回值)或表达式 示例:
<p data-bind="text: (dataBind1() + dataBind2())"></p>
必须发送值、函数(返回值)或表达式 示例:
<p data-bind="text: (dataBind1() + dataBind2())"></p>
表达式中有一个语法错误。(尾随加号)。另外,为完全可复制的示例包含javascript视图模型也会很有帮助。javascript视图模型是动态生成的,本质上是私有的(闭包),因此我无法访问它,尾部+是我在这里输入的错误类型,页面上使用的代码中没有。我可以验证这两个binding在分离时是否工作,因为我添加了2个元素,并将其中1个绑定绑定到每个和那些工作的元素。我将提供更多的信息明天(也许甚至答案)在这3个小时,现在不能再看代码或我会挖我的眼睛。把你的实际问题一秒钟,我的第一个想法是,你的观点知道太多的基础模型-考虑抽象出一个子模型为您的观点,因此,视图不需要知道
getModelData(processID).Property()[0].Street
,而只是Street
。嗯,@JamesThorpe这是一个有效点,它会仔细考虑。目前这个模型是动态更新的,而且非常混乱,所有的东西都是在服务器端动态创建的,所以它只是拖拽元数据链。实际上,在一个JS对象中嵌入了多个“视图模型”,我将与我的团队讨论,谢谢你的提示;你看到了什么错误?是否存在绑定,但不符合预期?您是否在applyBindings()处收到未处理的异常?您是否在呈现的HTML中看到类似于函数dependentObservable(){[native code]}的内容?如果表达式中有语法错误,则需要更多详细信息来进行测试。(尾随加号)。另外,为完全可复制的示例包含javascript视图模型也会很有帮助。javascript视图模型是动态生成的,本质上是私有的(闭包),因此我无法访问它,尾部+是我在这里输入的错误类型,页面上使用的代码中没有。我可以验证这两个binding在分离时是否工作,因为我添加了2个元素,并将其中1个绑定绑定到每个和那些工作的元素。我将提供更多的信息明天(也许甚至答案)在这3个小时,现在不能再看代码或我会挖我的眼睛。把你的实际问题一秒钟,我的第一个想法是,你的观点知道太多的基础模型-考虑抽象出一个子模型为您的观点,因此,视图不需要知道getModelData(processID).Property()[0].Street
,而只是Street
。嗯,@JamesThorpe这是一个有效点,它会仔细考虑。目前这个模型是动态更新的,而且非常混乱,所有的东西都是在服务器端动态创建的,所以它只是拖拽元数据链。那里