1

我正在启动 ServiceStack social bootstrap api 示例,看看它是如何工作的。

我点击了“登录”链接,什么也没发生。我查看了代码(见附件图片 1)

<a data-cmd="signIn">sign in</a>

在“登录”链接的点击事件中,我的理解是 e.srcElement 在这里会是“a”标签吗?

但是,它说 e.srcElement “未定义”(参见附件图 2)。因此,从未达到“signIn”cmd。

我没有在社交引导 api 示例中进行任何更改。我究竟做错了什么??

(对不起图片大小,请用浏览器放大一点看文字更清楚)

在此处输入图像描述 在此处输入图像描述

4

2 回答 2

2

呸!花了很多时间四处挖掘。找出示例为什么会做所有奇怪的事情。

我发现它不适用于 IE 或 Firefox,这是我正在测试的两个浏览器。

该示例是在 Chrome 下开发和测试的,仅适用于 Chrome。

于 2012-09-18T11:03:32.390 回答
1

虽然我在演示中不关心 IE,但我确实想支持 Firefox。我已将问题追溯到此 javascript 错误,例如我已更改:

var dataCmd = $(e.srcElement).data('cmd');

var dataCmd = $(e.srcElement || e.target).data('cmd');

此更改已重新部署到http://bootstrapapi.apphb.com

基本上它的工作方式是我有一个全局点击处理程序来捕捉任何点击,如果 src/target 元素有一个cmd定义,我将它发布到所有注册的模块:

$(document.body).click(function (e) {
    console.log("handleClicks", e);
    var dataCmd = $(e.srcElement || e.target).data('cmd');
    if (!dataCmd) return;

    var cmd = dataCmd.split(':'),
        evt = cmd[0],
        args = cmd.length > 1 ? cmd[1].split(',') : [];

    app.sendCmd(evt, args);
});

因此,任何对该点击感兴趣的人都可以处理它。在这种情况下,data-cmd="signIn"将是register.js模块,它只是在 Backbone 模型上设置用户首选项:

signIn: function(e) {
    this.model.set({ hasRegistered: true });
},
于 2012-09-18T16:36:16.083 回答