Выполнение функции по событию щелчка в шаблоне усов - PullRequest
2 голосов
/ 07 декабря 2011

У меня есть страница, которая управляется шаблоном усов (вместе с javascript и jquery), и я не могу понять, как вставить функцию в этот шаблон.По сути, я хочу добавить ссылку или кнопку на страницу, которая выполняет функцию «onTaskSelected(taskId)», когда пользователь нажимает на нее.Я искал способ сделать это в течение нескольких дней, и очень сложно найти обширную документацию / поддержку / примеры для усов.Кто-нибудь знает, как это можно сделать?

Правка - Вот часть кода, который я пробовал:

data["B" + task.taskId] = {
    changeTask : function(taskId) {
        var self = this;
        self.onTaskSelected(taskId);
    },
    taskId : task.taskId
};

Данные загружаются в шаблон усов, который имеет следующеевнутри него:

<button onClick="{{#B8.changeTask}}B8.taskId{{/B8.changeTask}}">Change to task 8</button>

Я отладил код до точки, когда данные отправляются в шаблон для преобразования в html, а B8 правильно установил и changeTask, и taskId.Однако к моменту отображения html кнопка выглядит следующим образом:

<button onclick>Change to task 8</button>

Почему происходит защелкивание onclick, и как я могу это исправить?Это не обязательно должна быть кнопка, но мне нужен кликабельный элемент на странице с этим текстом.

Обновление: с тех пор я обновил свой шаблон следующим образом:

<button onClick="{{#B8}}{{#changeTask}}8{{/changeTask}}{{/B8}}">Change to task 8</button>

По-видимому, мне нужно было вложить свои шаблоны данных для доступа к переменным внутри объекта "B8".Однако теперь у меня проблема в том, что он пытается выполнить функцию "changeTask", когда он создает HTML из шаблона.Как я могу заставить его ждать выполнения, пока я не нажму кнопку?

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Наконец-то все заработало, но я пошел совершенно другим путем.Хотел опубликовать его здесь на тот случай, если у кого-то возникнет такая же проблема.Я отформатировал усы, чтобы придать кнопке имя, а не пытался вставить метод onClick, затем перебрал каждую кнопку в этом разделе DOM с помощью jquery и добавил метод onClick к кнопкам с правильными именами.

Редактировать: Технически я также изменил свои кнопки на ссылки, которые я покажу в приведенном ниже коде, но это также должно работать и для кнопок.

шаблон:

<a name="{{{B8}}}">Change to task 8</a>

jquery (частичный пример):

$('a[name="' + buttonData[B8].name + '"]').click(function() {
    self.onTaskSelected(buttonData[B8].taskId); 
});

Надеюсь, что это полезно для других.

0 голосов
/ 16 июля 2012

Несмотря на то, что ваш собственный ответ по сути правильный, есть более простой вариант выбора с помощью jQuery:

$(link+'[name|="'+buttonData[B8].name+'"]')

Надеюсь, это поможет вам в будущем.

Кстати - я самвсе еще в поисках решения исходной проблемы ...

...