2013-09-28 2 views
1

Предположим, я хочу называть мою обычную функцию javascript одной из моих привязок данных. Можно ли это сделать? я попробовал: -Могу ли я вызвать функцию внешней viewmodel на нокауте?

<span data-bind = "click : outsideFn() ">hi</span> 

<span data-bind=" click : function() { outsideFn() } ">hi</span? 

Очевидно, моя попытка оказалась неудачной.

http://jsfiddle.net/RcxVj/

Edit: - Добавление jsfiddle на бирке, как это, кажется, проблема с jsfiddle.

+1

Вы пробовали это за пределами jsfiddle? Я немного изменил его и заставил его работать. Похоже, что есть проблемы с загрузкой скриптов. [Jsfiddle] (http://jsfiddle.net/RcxVj/3/) – bluetoft

+0

Я только попытался выполнить jsfiddle, и вы правы, он действительно работает. Размещение моего javascript-кода в конце элемента body и загрузка библиотеки нокаутов на голову сделали трюк. Спасибо. – shriek

ответ

9

Да, можно использовать функцию простого javascript в привязке данных. Попробуйте в своем проекте, он работает. В скрипте jsfiddle могут возникнуть некоторые проблемы.

+0

Это то, что заставляло мой скрипт терпеть неудачу. Я пытался использовать jsfiddle, а не создавать фактический файл. Как отметил @bluetoft, нокаут должен быть загружен в тело, чтобы работать в jsfiddle. Спасибо за помощь. – shriek

1

Да, вы можете. Пожалуйста, обратите внимание, что official Knockout documentation для click связывания:

Вы можете ссылаться на любую функцию JavaScript - это не должно быть функцией от вашей модели представления. Вы можете ссылаться на функцию на любой объект, нажимая click: someObject.someFunction.


Рабочий пример:

http://jsbin.com/opamEzu/1/edit

HTML

<span data-bind="text: txt, click: outsideFn"></span>

Javascript

var outsideFn = function() { 
    alert("outside function"); 
}; 

var vm = { 
    "txt": ko.observable("some text") 
}; 

ko.applyBindings(vm); 
Смежные вопросы