作为学习练习,我将一个 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 下面的评论之一,我发布了更多代码。这是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 系统中的这个特定应用程序加载了以下文件。