在哪里触发绑定的应用程序

时间:2014-03-24 07:08:59

标签: knockout.js internet-explorer-8 durandal-2.0

在Durandal应用程序中,我有一个对话框,其中包含绑定到viewmodel的视图。

每个输入元素的标签元素包括使用icon-warning-sign完成的警告标志符号。每个字形的可见性由数据绑定控制,如下所示:

<div class="form-group">
  <label for="email">
    Email <i class="icon-warning-sign orange" 
      data-bind="visible:Email.hasError, attr: { title:Email.validationMessage }"></i>
  </label>
  <input id="email" class="form-control" type="text" 
    data-bind="value: Email, valueUpdate: 'afterkeydown'" />
</div>

电子邮件是视图模型的可观察属性。 hasError属性是由扩展程序创建的子可观察对象。其中有几个,这里是一个样本。只有验证实现会有所不同。

function prepForExtender(target) {
  if (target.hasError) return;
  target.hasError = ko.observable();
  target.validationMessage = ko.observable();
}

ko.extenders.required = function (target, overrideMessage) {

  prepForExtender(target);

  //define a function to do validation
  function validate(newValue) {
    target.hasError(!newValue);
    target.validationMessage(newValue ? "" : 
      overrideMessage || "This field is required");
  }

  //initial validation
  validate(target());

  //validate whenever the value changes
  target.subscribe(validate);

  //return the original observable
  return target;
};

以下是扩展器的示例用法。

register.FirstName = ko.observable()
  .extend({ required: "First name is missing" });

除IE8外,一切正常。请不要在花生画廊看到有关IE8的评论,它是客户的SOE,而且这就是它的全部内容。在IE8中,当对话框打开时,警告字形不可见。如果您编辑输入的值,则会正确更新字形的可见性,因此绑定和逻辑可以正常工作。

如何在首次显示对话框时触发评估?

更多信息: 在转换为hasError()== true之前,字形不会变得可见。因此,如果页面以给定输入的hasError true开头,则必须使hasError返回false,然后再次返回true,以使字形变为可见。

0 个答案:

没有答案