私はバックボーンに不慣れで、押したときにボタンがトリガーされる方法を探しています Enter クリックするだけでなく。現在、showPromptはクリックでのみ実行されます。押すと実行する最もクリーンなDRYestの方法は何ですか Enter 同様に、できればその入力フィールドに対してのみ。
(function () {
var Friend = Backbone.Model.extend({
name: null
});
var Friends = Backbone.Collection.extend({
initialize: function (models, options) {
this.bind("add", options.view.addFriendLi);
}
});
var AppView = Backbone.View.extend({
el: $("body"),
initialize: function() {
this.friends = new Friends(null, {view: this});
},
events: {
"click #add-friend": "showPrompt",
},
showPrompt: function () {
var friend_name = $("#friend-name").val()
var friend_model = new Friend({ name:friend_name });
this.friends.add( friend_model );
},
addFriendLi: function (model) {
$("#friends-list").append("<li>" + model.get('name') + "</li>");
}
});
var appView = new AppView;
}());
また、この種のイベントバインディングの詳細はどこで読むことができますか?バックボーンイベントは、定義方法がJSまたはjQueryイベントと異なりますか?
DOM manipulation
にjQuery
を使用していると仮定すると、独自の「小さな」プラグインを作成して、 Enter 入力のイベント。 plugins.js
またはお持ちのセットアップスクリプトファイルに入れてください。
$('input').keyup(function(e){
if(e.keyCode == 13){
$(this).trigger('enter');
}
});
この「enter」プラグインを作成したので、次の方法でenterイベントを聞くことができます。
events: {
"click #add-friend": "showPrompt",
"enter #friend-name": "showPrompt"
}
event
のevents
ハッシュにもう1つAppView
を追加できます。
events: {
"click #add-friend": "showPrompt",
"keyup #input-field-id" : "keyPressEventHandler"
}
どこ #input-field-id
はイベントを追加したいものです。
次に、eventHandler
にAppView
を追加します。
keyPressEventHandler : function(event){
if(event.keyCode == 13){
this.$("#add-friend").click();
}
}
注:このコードはテストされていませんが、この方法で行うことを考えることができます。
this を見て、Backbone
がevents
のView
をどのように処理するかを理解してください。