Javascript "Ожидаемый"] " - PullRequest
3 голосов
/ 01 мая 2011

Я полагаю, что сегодня слишком долго смотрю на свой экран - здесь я не могу найти ошибку.У меня есть шаблон jQuery, и я использую foreach KnockoutJS на нем.Внутри у меня есть кнопка, и я пытаюсь вызвать функцию onclick и передать значение итерации.Вот фрагмент из шаблона.Единственное, что я могу считать неправильным, это что-то в синтаксисе моего шаблона jQuery, хотя он работает в другом месте <button onclick="newTabify(${$data})">Chat</button>

Мой шаблон выглядит следующим образом ... (кнопка внутри, вместе с кучей другихвещи)

 <div data-bind='template: {name: "contactTemplate", foreach:contacts}' id="contactList"></div>
<script id='contactTemplate' type='text/html'>
 ... 
</script> 

Функция newTabify выглядит следующим образом:

 function newTabify(contact) {
        tabify($.inArray(contact, viewModel.contacts()));
    }

Чрезвычайно странным здесь является ошибка.

SCRIPT1007: Expected ']' 
default.html, line 1 character 19

Строка 1 - это мой <head> тег !!

Если вам нужна дополнительная разметка, просто дайте мне знать.Спасибо!

РЕДАКТИРОВАТЬ: Вот мой шаблон контактов.Самое смешное, что в этом нет ничего плохого, кроме события нажатия на кнопку, когда я пытаюсь добавить строку, как показано выше.Но остальное в любом случае.

{{if $data.jid() != viewModel.jid() }}
    <div class="wrapper" onclick="wrapperClick(this)">
    <div style="padding-bottom:4px">
    <img src=images/${$data.avail}.png> ${ $data.name } <img class="avatar" src=images/${$data.img}><br> <span class="status">${$data.status }</span>
                </div>
        <a href="mailto:${$data.jid}" >${$data.jid}</a> | <button onclick="newTabify(${$data})">Chat</button> | <button onclick="event.stopPropagation();">Call</button>
    </div>
    {{/if}}

РЕДАКТИРОВАТЬ 2: $ data объект контакта;я перебираю контакты (наблюдаемый массив контактных объектов) и успешно извлекаю все значения из контакта и т. д. Вот мой контакт:

function contact(name, status, avail, jid, img, convIndex){
    return {
    name : ko.observable(name),
    status : ko.observable(status),
    avail : ko.observable(avail), 
    img : ko.observable(img),
    jid : ko.observable(jid),
    convIndex: ko.observable(convIndex)
    };

}

Так что технически $ dataдолжен быть инстинктом вышеизложенного.

Ответы [ 2 ]

6 голосов
/ 01 мая 2011

Я не могу гарантировать, что это ваша единственная проблема, но эта строка не даст вам того, что вы ожидаете:

<button onclick="newTabify(${$data})">Chat</button>

Выполнение $ {$ data} даст вам.toString () вашего объекта.Для вашего объекта это будет выглядеть так:

[object Object]

Таким образом, это не будет допустимым синтаксисом.

Поскольку вы используете Knockout, вы можете вместо этого сделать что-то подобное (даже внутришаблон), и он будет правильно передавать фактический объект:

<button data-bind="click: function() { newTabify($data); }">Chat</button>
0 голосов
/ 01 мая 2011

Я предлагаю вам запустить JSLint против вашего кода. Это должно указать вам правильное направление.

...