gpt4 book ai didi

javascript - Knockoutjs 映射和非结构化数据

转载 作者:行者123 更新时间:2023-11-29 19:31:29 25 4
gpt4 key购买 nike

knockoutjs映射插件如何使用非结构化数据?例如源 json:

[
{
"id": 1,
"name": "Store #1",
"address": "City #1"
},
{
"id": 2,
"name": "Store #2"
}
]

没有地址的商店#2。我的模板:

<ul data-bind='foreach: data'>
<li data-bind='with: id'>
<a href data-bind='text: name, click: function () { $parent.view($data, $index()) }'>
</a>
<span data-bind='text: address'></span>
</li>
</ul>

我的 View 模型

Module.store = function () {

var self = this;

self.data = ko.mapping.fromJS([]);
self.init = function () {
$.getJSON('json/stores.json', function (stores) {
ko.mapping.fromJS(stores, self.data);
});
};
};

如果我运行这段代码,我会得到错误:

Uncaught ReferenceError: Unable to process binding "text: function (){return address }" Message: address is not defined

对于商店 #2

如何为 Store #2 地址属性设置 null 或空字符串?

最佳答案

如果您的 View 显示地址,那么您的 View 模型必须包含该属性。

为各个商店制作 View 模型:

Module.Store = function (data) {
this.id = null;
this.name = null;
this.address = null;

ko.mapping.fromJS(data, {}, this);
}

以及商店列表中的使用映射定义(请参阅 documentation):

Module.StoreList = function () {
var self = this,
mappingDefinition = {
create: function (options) {
return new Module.Store(options.data);
}
};

self.stores = ko.observableArray();

self.viewStore = function (store) {
// ...
};
self.init = function () {
$.getJSON('json/stores.json', function (stores) {
ko.mapping.fromJS(stores, mappingDefinition, self.stores);
});
};
};

修改后的 View (作为一般规则,尽量避免在 View 定义中使用内联函数):

<ul data-bind='foreach: stores'>
<li>
<a href data-bind='text: name, click: $parent.viewStore'></a>
<span data-bind='text: address'></span>
</li>
</ul>

关于javascript - Knockoutjs 映射和非结构化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27213045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com