学習演習のために、sinatra/backboneアプリをRails環境に変換しました。ChromeとFirefoxで動作しましたが、Safariでは動作しません。元のアプリhttp://backbone-hangman.heroku.comはSafariでも動作しないことが判明しました 。「新しいゲーム」をクリックしても、イベントは発生しないようです。Safariコンソールにはエラーは表示されません(ただし、Safariの開発者ツールは使用したことがないため、それほど経験はありません)。
ここで利用可能なアプリのライブバージョンがあるのでhttp://backbone-hangman.heroku.com 私は多くのコードを投稿しませんが、これはクリック#new_gameでイベントを設定し、startNewGameをトリガーするビューコードです働き。Safariでは何も起こりません。オリジナルのソースコードはこちらhttps://github.com/trivektor/Backbone-Hangman
私は少しグーグルで検索し、Safariがイベントを異なる方法で処理するという言及を見つけましたが、解決策を見つけることができませんでした。何かお勧めはありますか?
$(function() {
window.OptionsView = Backbone.View.extend({
el: $("#options"),
initialize: function() {
this.model.bind("gameStartedEvent", this.removeGetAnswerButton, this);
this.model.bind("guessCheckedEvent", this.showGetAnswerButton, this);
},
events: {
'click #new_game': 'startNewGame',
'click #show_answer': 'showAnswer'
},
startNewGame: function() {
this.model.new();
},
removeGetAnswerButton: function() {
$("#show_answer").remove();
},
showGetAnswerButton: function(response) {
console.log("showGetAnswerButton");
console.log(response);
var threshold = this.model.get("threshold");
console.log(threshold);
if (response.incorrect_guesses == this.model.get("threshold")) {
$(this.el).append('<input type="button" id="show_answer" class="action_button" value="Show answer" />');
}
},
showAnswer: function() {
this.model.get_answer();
}
})
})
アップデート
OPの下のコメントの1つに基づいて、私はより多くのコードを投稿しています。これは、オブジェクトがインスタンス化されるhangman.jsです。
var game = new Game
var options_view = new OptionsView({model: game});
var characters_view = new CharactersView({model: game});
var hint_view = new HintView({model: game});
var word_view = new WordView({model: game});
var hangman_view = new HangmanView({model: game});
var answer_view = new AnswerView({model: game});
var stage_view = new StageView({model: game});
ビューとモデルはこのようにウィンドウに添付されます
window.AnswerView = Backbone.View.extend({ ...
更新サイト全体に読み込まれるBackbone、jQuery、Underscoreの他に、Railsシステムのこの特定のアプリ用に次のファイルが読み込まれます。