【发布时间】:2016-01-27 17:58:09
【问题描述】:
我希望能够像这样组织我的 Knockout 代码:
- 导入“Master Json”文件并进行映射。
- 创建多个视图模型,每个模型都引用“Master Json”文件的特定部分。
- 将每个视图模型中的所有可观察对象绑定到“Master Json”文件的值。
是否可以使用 ko.subscribable 让所有内容都订阅我的 json 文件作为主值?
或者如何从每个视图模型函数内部移动 $.getJSON(和保存)函数?我可以创建一个函数,以便 getJSON 结果可在每个视图模型中重复使用吗?
function ApplesViewModel ( data ) {
// ko.observables here
//Get Json
$.getJSON("json/masterJson.json", function(allData) {
var mappedSlides = $.map(allData, function(item) { return new Slide(item) });
self.slides(mappedSlides);
});
//Save Json
self.save = function() {
$.ajax("/masterJson", {
data: ko.toJSON({ slides: self.slides }),
type: "post", contentType: "application/json",
success: function(result) { alert(result) }
});
};
}
function BananasViewModel( data ) {
//same as ApplesViewModel but with different observables
}
function CarrotsViewModel( data ) {
//same as ApplesViewModel but with different observables
}
ko.applyBindings(new ApplesViewModel());
ko.applyBindings(new BananasViewModel());
ko.applyBindings(new CarrotsViewModel());
我不想多次导入它,因为我认为每次都会制作一个新副本。它应该只有一个 Json 文件。当我尝试移动它时,我会收到所有内容都未定义的错误。
也许这是完全错误的做法。每个人都将所有内容都放在一个视图模型中吗?会不会很快变得混乱?
【问题讨论】:
-
目前还不清楚你在问什么。尝试从您的代码中删除对实际问题不重要的位,但添加一些代码以使其完全重现您的实际场景/尝试做它你认为你需要/想要做什么。请记住:我们没有任何上下文,所有我们只有您问题中的文字。
-
为什么要删除 $.getJSON 。您是否要从视图模型中删除
save和Get并将其保留在外面的某个地方? -
我不完全知道我问的问题是否正确。我需要一个起点,这样我才能正确开始。编辑了问题以希望增加清晰度。
标签: knockout.js knockout-mapping-plugin