1

ServiceStackソーシャルブートストラップAPIの例を起動して、どのように機能するかを確認しています。

「サインイン」リンクをクリックしても何も起こりませんでした。そして私はコードを調べました(添付の写真1を参照)

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

「サインイン」リンクのクリックイベントで、私の理解では、e.srcElementはここでは「a」タグになりますか?

ただし、e.srcElementは「未定義」と表示されます(添付の写真2を参照)。そのため、「signIn」コマンドに到達することはありませんでした。

ソーシャルブートストラップAPIの例では何も変更していません。私は何が間違っているのですか?

(画像サイズについては申し訳ありませんが、テキストをより明確に表示するには、ブラウザで少しズームインしてください)

ここに画像の説明を入力してください ここに画像の説明を入力してください

4

2 に答える 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);
});

そのため、そのクリックに興味がある人は誰でもそれを処理できます。この場合は、バックボーン モデルにユーザー設定を設定するregister.jsdata-cmd="signIn"モジュールになります。

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