我有一个使用KnockoutJS的ASP.NET MVC4 SPA web应用程序,这有点尴尬,因为据我了解,当页面最初加载到SPA时通常没有数据直到AJAX调用检索它。当我尝试使用像data-bind="with: myData"
这样的属性绑定块中的各种数据时,该节点内的整个DOM被清空,直到myData变为有效,这让我感到紧张,如果某些脚本可能依靠这些元素可用于附加脚本到或某物。页面块在加载过程中消失并重新出现也很糟糕。所以,我设计了with
结合,以防止后代绑定,如果该值为空,目前看起来像这样的变化:KnockoutJS“与”绑定在模型可用之前
ko.bindingHandlers.safeWith = {
'init': ko.bindingHandlers.with.init,
'update': function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var value = ko.utils.unwrapObservable(valueAccessor());
if ((value != undefined) && (value != null))
ko.bindingHandlers.with.update(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
}
};
然后,我只是用safeWith
而不是with
,以确保我没有按DOM”在等待myData
被填充时不会消失。
我的问题是:
- 这是利用基因敲除SPA的一个共同的问题,如果是这样,它是如何正常处理?
- 我处理这个安全问题的方式或者是否有我以某种方式应用重复事件/绑定的风险或我不知道的一些风险?
- 我很惊讶我在漫游有关网络学习淘汰赛和相关技术,我没有跑过这个。 倾向于有充分的理由让DOM的部分在它们绑定到的对象为空时消失;我是否试图保持它的错误?
如果您搜索''with''的knockout JS文件(包括引号),您将看到它是通过调用'makeWithIfBinding'创建的。 ''with''只在我的knockout.js版本中出现过一次('knockout-2.2.0.debug.js')。我知道想要移除不适用的DOM部分,但是您是否也必须处理尚未加载模型的DOM的某些部分,但是当页面加载完成时它会被加载?在这些情况下你会遇到这个问题吗? – BlueMonkMN
偶尔遇到它,但我通常在完成加载数据之前避免显示视图。你使用单页面应用程序还是多页面? –
我正在对一个应用程序进行原型设计,我期望每个主要功能都是一个小型SPA。在页面中加载新记录将使用AJAX调用来检索新数据,而不是重新加载整个页面,但导航到另一个函数将加载一个全新的页面。 – BlueMonkMN