标签: ko-custom-binding

如何使用ko.observableArray()自定义绑定

敲除自定义绑定如何与observableArray一起使用?当使用带有自定义绑定的ko.observable()时,一切都按预期工作.使用ko.observableArray()时,仅抛出初始事件(init和update one),但未检测到进一步的更改(请参阅下面的Fiddle或代码).

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="knockout-2.2.1.js"> </script>
</head>
<body>
    <div data-bind="text: Observable, updateBinding: Observable"></div>
    <div data-bind="foreach: ObservableArray, updateBinding: ObservableArray">
        <span data-bind="text: $data"></span>
    </div>
    <script type="text/javascript"> 
        ko.bindingHandlers['updateBinding'] = {
            init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
                alert("Binding Handler (Init)");
            },
            update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
                alert("Binding Handler (Update)");
            }
        };

        function ViewModel() {
            var self = this;

            self.ObservableArray = ko.observableArray();
            self.Observable = ko.observable();
        }

        var viewModel = new ViewModel();

        // Fires Init …
Run Code Online (Sandbox Code Playgroud)

knockout.js ko-custom-binding

8
推荐指数
1
解决办法
4268
查看次数

Knockout.js - 如何限制自定义绑定

我有一个自定义绑定来处理自动完成,当用户从自动完成中选择一个项目时,我会与服务器通信并用缩短的名称替换text_field.问题是这会第二次触发我的自定义绑定的"更新"功能.

Knockout.js代码(编辑:注意以下是CoffeeScript):

ko.bindingHandlers.ko_autocomplete =
  init: (element, params) ->
    $(element).autocomplete(params())

  update: (element, valueAccessor, allBindingsAccessor, viewModel) ->
    unless task.name() == undefined
      $.ajax "/tasks/name",
        data: "name=" + task.name(),
        success: (data,textStatus, jqXHR) ->
          task.name(data.short_name)


  Task = ->
    @name = ko.observable()
    @name_select = (event, ui) ->
      task.name(ui.item.name)
      false  

  task = Task.new()
Run Code Online (Sandbox Code Playgroud)

视图

= f.text_field :name, "data-bind" => "value: name, ko_autocomplete: { source: '/autocomplete/tasks', select: name_select }"
Run Code Online (Sandbox Code Playgroud)

有没有办法将油门应用于自定义绑定?

我只想在将task.name设置为从服务器发回的short_name时再次触发自定义绑定'更新'功能.

knockout.js ko-custom-binding

5
推荐指数
1
解决办法
2017
查看次数

淘汰赛:如何从自定义绑定更新另一个绑定?

我们在optionsCaption绑定方面遇到常见问题:即使只有一个元素也会显示它.我们使用自定义绑定解决了这个问题:

ko.bindingHandlers.optionsAutoSelect = {
    update: function (element, valueAccessor, allBindingsAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());
        var allBindings = allBindingsAccessor();

        if (value.length == 1) {
            allBindings.optionsCaption = null;
        }
        ko.bindingHandlers.options.update(element, valueAccessor, allBindingsAccessor);
    }
};
Run Code Online (Sandbox Code Playgroud)

在更新到knockout 3.0之后,allBindings变为readonly.因此,任何更改都会被跳过.任何想法如何在ko 3.0中解决?我们确实有很多这样的自动选择,并且不想在所有视图上复制粘贴一些计算代码.所以我们想要一些单选项/扩展点.不幸的是,因为我可以看到选项绑定是相当单一的.

knockout.js ko-custom-binding

5
推荐指数
1
解决办法
3155
查看次数

knockout:在自定义绑定init中添加另一个绑定

我想创建一个自定义绑定作为添加其他绑定的简写 - 如宏.

<div data-bind="foo: 1"></div>
Run Code Online (Sandbox Code Playgroud)

应该做同样的事情

<div data-bind="click: clickHandler, css: { someClass: someObservable }, ...">
</div>
Run Code Online (Sandbox Code Playgroud)

就像是:

ko.bindingHandlers.foo = {
    init: function(el,val,bindings,model,context) {
        // some way to add { click: clickHandler } to bindings()
    }
}
Run Code Online (Sandbox Code Playgroud)

knockout.js ko-custom-binding

3
推荐指数
1
解决办法
768
查看次数

我可以在自定义绑定中动态绑定元素吗?

有没有办法从自定义绑定内部绑定元素?例如,我有自定义绑定并绑定到它可观察的项目数组:

var someArrayOfItems = ko.observableArray(['item1', 'item2', 'item3']);
...
<div data-bind="myBinding: someArrayOfItems"></div>
Run Code Online (Sandbox Code Playgroud)

现在我希望myBinding列出它被绑定的div元素中的'someArrayOfItems'中的所有元素:

<ul data-bind="foreach: someArrayOfItems">
    <li>
        <span data-bind="text: $data"></span>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

是否可以使用自定义绑定进行此类操作?谢谢你的帮助.

knockout.js ko-custom-binding

2
推荐指数
1
解决办法
4382
查看次数

如何创建一个淘汰提示文本自定义绑定?

我试图创建一个自定义绑定,以显示文本输入中的提示文本.

到目前为止,我有这个,但它不起作用:

ko.bindingHandlers.hintText= {
    init: function (element, valueAccessor) {
        element.focus(function () {
            if ($(this).val() === defaultText) {
                $(this).attr("value", "");
            }
        });
        element.blur(function () {
            if ($(this).val() === '') {
                $(this).val(valueAccessor());
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

html:

<input id="profileID" type="text" data-bind="hintText:'Enter Profile ID'" />
Run Code Online (Sandbox Code Playgroud)

knockout.js ko-custom-binding

1
推荐指数
1
解决办法
3374
查看次数

标签 统计

knockout.js ×6

ko-custom-binding ×6