knockoutjs - несколько привязок по событию клика - PullRequest
28 голосов
/ 18 марта 2012

Я хотел бы знать, возможно ли создать несколько привязок для события в knockout.js

пример:

<span data-bind="click: function1 function2, attr: {}"></span>

Ответы [ 4 ]

52 голосов
/ 19 марта 2012

Попробуйте использовать

<span data-bind="click: function() { function1(); function2() }"></span>
2 голосов
/ 19 декабря 2012

EDIT: я случайно использовал MooTools typeOf () , не задумываясь. Исправлено.


Вот что я придумала. Я признаю, что это излишне для большинства ситуаций, но синтаксис на стороне шаблона немного чище:

Просмотр модели:

var ViewModel = new function() {
    this.call = function(functions,args) {
        if (!(functions instanceof Array))
            functions = [functions];
        if (!(args instanceof Array))
            args = [args];

        return function() {
            for (var i = 0, l = functions.length; i < l; i++) {
                functions[i].apply(this,args);
            }
        }
    }

    this.testValue=ko.observable('Click me!');
    this.click1 = function(foo) {
        this.testValue('click1 ' + foo);
        alert(1);
    }
    this.click2 = function(foo) {
        this.testValue('click2 ' + foo);
        alert(2);
    }
}

и шаблон

<span data-bind="click:call([click1,click2],['Test value'])">Test span</span>
1 голос
/ 22 января 2018

Как насчет простой простой привязки clickArray:

ko.bindingHandlers.clickArray = {

  init: function (element, valueAccessor) {
    var handlers = valueAccessor();

    ko.applyBindingsToNode(element, {
      click: function () {
        for (var i = 0; i < handlers.length; i++) {
          handlers[i].apply(this, arguments);
        }
      }
    });
  }

};

Затем вы заверните HTML-код:

<div id="foo">
  <a data-bind="clickArray: [bar, baz]">Click</a>
</div>

… и создадите модель:

var viewModel = {
    bar: function () {
      alert('Bar!');
    },

    baz: function () {
      alert('Baz.');
    }
  }
}

ko.applyBindings(viewModel, document.getElementById('foo'));

Рабочая скрипка: https://jsfiddle.net/hejdav/qmfem8t3/6/

0 голосов
/ 04 мая 2013

Я попробовал это в своем коде, и, кажется, работает:

<button data-bind="click: viewMode.bind($data, 'view'), click: itemUpdate">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...