Knockout.js js如何访问数据绑定的内部对象属性

Knockout.js js如何访问数据绑定的内部对象属性,knockout.js,Knockout.js,我有一个超级简单的淘汰代码如下: var data ={ "Id" : 1001, "SalePrice" : 12345, "ListPrice" : 333, "ShortDesc" : "Tayler 12345E", "Description" : " Long Description" }; var viewModel={ dataTest: ko.observable(data) }; ko.applyBindings(view

我有一个超级简单的淘汰代码如下:

var data ={
    "Id" : 1001,
    "SalePrice" : 12345,
    "ListPrice" : 333,
    "ShortDesc" : "Tayler 12345E",
    "Description" : " Long Description"
};


var viewModel={
    dataTest: ko.observable(data)
};


ko.applyBindings(viewModel);

<span data-bind="text: dataTest.SalePrice"></span>
var数据={
“Id”:1001,
“销售价格”:12345,
“标价”:333,
“ShortDesc”:“Tayler 12345E”,
“说明”:“详细说明”
};
var视图模型={
数据测试:ko.可观察(数据)
};
应用绑定(视图模型);
基本上,我已经将整个数据对象传递给了observable property dataTest。我原以为用点表示法访问内部对象的属性很容易。但事实并非如此

有人能帮助您如何使上述代码正常工作吗?

请查看。您需要做的就是这样

<span data-bind="text: salePrice "></span>
如果希望直接访问视图模型,请使用。在这种情况下,您需要
$data
绑定上下文。因此span中的绑定将更改为

<span data-bind="text:$data.salePrice"></span>

它现在是可观察的(即,它是一个函数)。您需要调用该函数

<span data-bind="text: dataTest().SalePrice"></span>


然而,不确定这为什么比嵌套适当的层次结构更有利。OP所要求的是相当反模式的。我想您可能想查看一下如何创建
dataTest
作为父对象,然后在标记中向下钻取。

如果页面是只读的,并且视图模型不会更改(如我的情况),那么您就不需要可观察的

您还可以通过执行以下操作使代码示例正常工作:

var viewModel={
    dataTest: data
};
然后,您可以使用简单的点表示法访问数据绑定中的属性

<span data-bind="text: dataTest.SalePrice"></span>


在我的例子中,使用上下文或绑定是不可取的,因为我必须在一个比较表中的两个对象之间不断来回切换。

调用ko.observative需要从MVVM移动到HTML元素:

    var data ={
    "Id" : 1001,
    "SalePrice" : 12345,
    "ListPrice" : 333,
    "ShortDesc" : "Tayler 12345E",
    "Description" : " Long Description"
};


var viewModel={
    dataTest: data
};


ko.applyBindings(viewModel);

<span data-bind="text: ko.observable(dataTest.SalePrice)"></span>
var数据={
“Id”:1001,
“销售价格”:12345,
“标价”:333,
“ShortDesc”:“Tayler 12345E”,
“说明”:“详细说明”
};
var视图模型={
数据测试:数据
};
应用绑定(视图模型);

它也可以写成:

<span data-bind="text: dataTest()['SalePrice']"></span>


我知道我们可以直接这样做。但是,我正在尝试访问分配给viewModel属性的对象。这是一个非常漫长的过程,当我们真正有权通过链接获取有关可观察对象的详细信息时。感谢您的回答,是否可以通过“数据”进行访问对象以同时访问所有属性?@stratovarius这可能是个新问题。我不太确定您在这里问什么,因为
SalePrice
是一个整数。如果您的意思是您可以从
dataTest()
中获取所有内容,那么您当然可以。但是在像这里这样的单个绑定对象中这样做没有多大意义。但也许?很难说——搜索一个与你所问问题相似的问题,如果没有弹出任何问题,请随意问一个新问题!我想在foreach的帮助下访问dataTest()的属性。很高兴看到您在询问OP的方法之前首先添加了一个解决方案。OP没有说明是否需要双向数据绑定,因此这是问题的另一个答案。我希望它能帮助别人。
<span data-bind="text: dataTest()['SalePrice']"></span>