2

是否可以在 Knockout JS 中查看附加到可观察对象的所有扩展程序和绑定?

示例视图模型:

var viewModel = function(){
  var self = this;

  self.firstName = ko.observable().extend({required: "Please enter a name",
                                           logChange: "first name" });

  self.lastName = ko.observable().extend({ required:true});

}

除了KO Validation Plugin之外,我还使用了几个自定义 bindingHandlers,包括Knockout X-Editable Plugin

示例多页视图:

  <!--Screen 1 -->
  <input data-bind="value:firstName"/>

   ....

  <!--Screen 2 -->
  <span data-bind="editable:firstName"></span>

A. 有没有办法查询self.firstName()并获取所有扩展程序的列表?

{required: "Please enter a name", logChange: "first name" }

B. 我可以运行另一个查询来获取依赖于这个 observable 的所有绑定处理程序吗?这可以作为 DOM 元素返回吗?

基本上我正在尝试显示导入数据的验证错误,但<span data-bind="editable"/>如果我在第二个视图中,我想将它们附加在下面。

单独验证每个输入时这很简单,但使用ko.validation.group(viewModel). 即使我遍历每个错误,我也看不到如何将它们与引发错误的原始 observable 关联起来。

4

1 回答 1

1

您可以使用自定义绑定

<span data-bind="validationMessage: myObservable"></span>

如果这还不够,那么您必须发挥创造力:D

没有通用的方法可以查看 observable 上的所有扩展程序。KO 验证为您可以使用的扩展可观察对象添加了一些函数和可观察对象

  • 清除错误
  • 错误
  • 已验证
  • isValidating
  • 规则
  • 设置错误

您需要创建自定义绑定才能查看附加到元素的所有绑定。这不是一件坏事,从 ViewModel 依赖于 View 是不好的做法。从您的自定义绑定初始化或更新函数中,您有一个 allBindingsAccessor

ko.bindingHandlers.myBinding = {
    init: function(element, accessor, allBindingsAccessor) {
       var valueAttachedToCheckedBinding = ko.utils.unwrapObservable(allBindingsAccessor().checked);
    }
}
于 2013-06-13T10:33:21.887 回答