gpt4 book ai didi

javascript - 在 Backbone View 中触发 el 事件

转载 作者:行者123 更新时间:2023-12-03 23:03:58 26 4
gpt4 key购买 nike

我有一个创建并填充选择列表的 View 。我想在 Change 事件上绑定(bind)一个事件(当用户选择不同的选项时。

它只是输出与此接近的内容:

<select>
<option value="id">ID Name</option
</select>
<小时/>

View :

App.Views.SessionList = Backbone.View.extend({
tagName: 'select',
id: 'sessionList',
events: {
'change': 'selectionChanged'
},
initialize: function () {
// Load Collection
_.bindAll(this, 'selectionChanged');

this.template = _.template($('#optionsTemplate').html());
this.Sessiontemplate = _.template($('#session_template').html());
this.SelectedSessiontemplate = _.template($('#selected_session_template').html());

// Create Collection
this.SessionList = new App.Collections.SessionList();

// Set Bindings
this.SessionList.bind('add', this.addSession, this);
this.SessionList.bind('reset', this.addSessions, this);


this.render();

this.SessionList.fetch();
},
render: function () {

return this;
},
addSession: function (item, num) {
if (num === 0) {
$(this.el).append(this.SelectedSessiontemplate(item.toJSON()));
console.log("Selected");
}
else {
$(this.el).append(this.Sessiontemplate(item.toJSON()));
}
},
addSessions: function () {
var self = this;
// Add all Rows
for (var i = 0; i < self.SessionList.models.length; i++) {
this.addSession(self.SessionList.models[i], i);
}
},
selectionChanged: function (e) {
var field = $(e.currentTarget);
var value = $("option:selected", field).val();
}
});

session 模板很简单:

<option value="{{Id}}">{{Name}}</option>

该事件永远不会被触发,并且它似乎没有被正确绑定(bind)。我想在选择列表发生变化时触发它。

我最初认为我可能遇到类似的问题: backbone.js events and el ,但是在这种情况下它不起作用。

最佳答案

很难直接调试您的问题,因为我们没有所有信息(SessionList 看起来像什么......模板等)。

但是,我已将您的示例与事件确实有效的一些代码配对。希望你能从那里建立它?您可以fork the jsFiddle如果您想要到达一个对您来说失败的地方,我们可以尝试提供进一步的帮助。

window.App = { Views: {} };

App.Views.SessionList = Backbone.View.extend({
tagName: 'select',

events: {
'change': 'selectionChanged'
},

initialize: function () {
_.bindAll(this, 'selectionChanged');
this.render();
},

render: function () {
$(this.el).append('<option value="foo">Option 1</option>');
$(this.el).append('<option value="bar">Option 2</option>');
return this;
},

selectionChanged: function (e) {
var value = $(e.currentTarget).val();
console.log("SELECTED", value);
}
});

var view = new App.Views.SessionList();
$("body").append(view.el);

根据该代码,每次选择一个项目时,您都会获得一个控制台日志,其中包含该值。

既然你没有明白这一点,我猜你看到了异常或类似的东西?你的调试器会给你任何提示吗?

祝你好运!

关于javascript - 在 Backbone View 中触发 el 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8011988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com