Javascript"预期']'"

Tho*_*lds 3 jquery jquery-templates knockout.js

我想我今天刚刚盯着我的屏幕太久了 - 我在这里找不到错误.我有一个jQuery模板,我正在使用KnockoutJS的foreach.在里面我有一个按钮,我试图调用函数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> 
Run Code Online (Sandbox Code Playgroud)

newTabify函数如下所示:

 function newTabify(contact) {
        tabify($.inArray(contact, viewModel.contacts()));
    }
Run Code Online (Sandbox Code Playgroud)

这里极端奇怪的是错误.

SCRIPT1007: Expected ']' 
default.html, line 1 character 19
Run Code Online (Sandbox Code Playgroud)

第1行是我的<head>标签!!

如果你需要更多标记只是lemme知道.谢谢!

编辑:这是我的联系模板.有趣的是,除了按钮上的点击事件,当我尝试添加如上所示的线时,它没有任何问题.但无论如何,这是剩下的.

{{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}}
Run Code Online (Sandbox Code Playgroud)

编辑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)
    };
Run Code Online (Sandbox Code Playgroud)

}

所以从技术上讲,$ data应该是上述的一个实例.

RP *_*yer 6

我不能保证这是你唯一的问题,但这条线不会给你你所期望的:

<button onclick="newTabify(${$data})">Chat</button>
Run Code Online (Sandbox Code Playgroud)

执行$ {$ data}将为您提供对象的.toString().对于您的对象,它看起来像:

[object Object]
Run Code Online (Sandbox Code Playgroud)

所以,这不是有效的语法.

因为,你正在使用Knockout,你可以做这样的事情(甚至在模板内),它将正确传递实际对象:

<button data-bind="click: function() { newTabify($data); }">Chat</button>
Run Code Online (Sandbox Code Playgroud)