在我的Durandal应用程序中,我已经使用这样的验证定义了一个属性:
inputObject.name.extend({ maxLength: 50 });
然后我在视图中绑定:
<input type="text" class="form-control" id="inputName" data-bind="value: crop().name" placeholder="Naam" />
当我第一次加载此视图时,验证按预期工作,当我关闭视图(对话框)并重新打开时,一切仍然按预期工作:
但是当用户刷新页面时出现问题。 输入字段显示其有效(无背景颜色),但验证图标仍在显示。
奇怪的是validation.group没有显示错误:
var errors = ko.validation.group(crop(), { deep: true });
// errors has no entry's
关闭并重新打开视图或执行另一个刷新/关闭浏览器等没有任何影响。此外,如果我输入无效(超过50个字符),输入字段将改变颜色:正如预期的那样!只有没有验证消息。所以验证仍然有效..只是图标似乎卡住/失去了它的绑定。
摆脱挂起验证图标的唯一方法似乎是导航到不同的页面(childroute),然后导航回来。验证将按预期工作,包括显示/隐藏图标。
更新
我不是在嘲笑我的观点。同样奇怪的是,只导航到第一条路线并返回修复问题。如果我导航到任何其他路线并返回,则验证仍然会中断。
var childRouter = router.createChildRouter()
.makeRelative({
moduleId: 'viewmodels/backgroundlist',
route: 'viewmodels/backgroundlist',
fromParent: true
}).map([
{ route: 'pst', moduleId: 'pst/pst', title: 'mddl', type: 'backgroundlist', nav: true },
{ route: 'ast', moduleId: 'ast/ast', title: 'wzs', type: 'backgroundlist', nav: true },
{ route: 'crp', moduleId: 'crp/crp', title: 'gws', type: 'backgroundlist', nav: true },
{ route: 'att', moduleId: 'att/att', title: 'tld', type: 'backgroundlist', nav: true },
{ route: 'cra', moduleId: 'cra/cra', title: 'gwt', type: 'backgroundlist', nav: true },
{ route: 'vrt', moduleId: 'vrt/vrt', title: 'ran', type: 'backgroundlist', nav: true }
]).buildNavigationModel();