Вспомогательные функции в jsviews

Я просматриваю следующие примеры на сайте JsViews для кнопок http://www.jsviews.com/#link-button. Когда я изменяю код, чтобы он принимал ввод и отображал его в окне предупреждения при нажатии кнопки, вспомогательная функция запускается при загрузке. Кроме того, вместо нажатия кнопки функция запускается при изменении входного значения. Я предполагаю, что, поскольку значение модели изменяется в представлении, функция вызывается с обновленным значением модели, но почему она не работает при нажатии кнопки. Я новичок в jsviews и не могу понять, что происходит. Может ли кто-нибудь сказать мне, что не так с моим подходом. Ниже приведен обновленный код.

<div id="topLinked">
<input type="text" data-link="test"/>
 <button data-link="{on ~doSomething(test)}">Do something</button>
<input type="button" data-link="{on ~doSomething(test)}" value="Do something" />
           </div>  

  var person = {};

var helpers = {
  doSomething: function(val) {
    alert(val);
  }
}

$.link(true, "#topLinked", person, helpers); // Data-link top-level content

person user1776573    schedule 07.09.2016    source источник


Ответы (1)


Вы сделали ошибку: data-link="{on ~doSomething(test)}". Аргументы передаются через одно или несколько пробелов следующим образом: data-link="{on ~doSomething test test2 ...}".

Я изменил пример следующим образом:

html

<div id="result"></div>

<script id="tmpl" type="text/x-jsrender">
  <input type="text" data-link="test" value="Do something" />
  {^{on ~doSomething test}}Do something{{/on}}
  <button data-link="{on ~doSomething test}">Do something</button>
  <input type="button" data-link="{on ~doSomething test}" value="Do something" />
</script>

JS

var person = {
    test : "start value"
};

var helpers = {
    doSomething : function (val) {
        alert(val);
        return false;
    }
}

var tmpl = $.templates("#tmpl");
tmpl.link("#result", person, helpers);

пример на jsfiddle

person Codd Wrench    schedule 08.09.2016
comment
Большое спасибо. На jsviews.com/#helpers есть пара примеров с неправильным синтаксисом. Это устарело или это использование для другого сценария. - person user1776573; 08.09.2016
comment
@user1776573 user1776573 Это не ошибка, это фича! Это правильно для jsrender и не совсем правильно для jsviews. Просто нужно знать, что ~doSomething(test) выполняется во время рендеринга шаблона, а ~doSomething test выполняется в подходящее событие. - person Codd Wrench; 08.09.2016