为什么我的jQuery隐藏事件没有启动,我的Backbone子视图没有渲染
Why are my jQuery hide events not firing and my Backbone sub view not rendering?
现在已解决-请参阅底部。。。。
我有一个主干列表视图,上面有一个按钮,应该显示编辑元素。
"showAddEntry"函数中的jQuery hide()调用或"versionEditView"的视图呈现都没有执行任何操作。我已经完成了,没有出现任何错误。我甚至尝试过在控制台中手动运行方法,看看hide发生了什么,但我没有取得任何进展。
这是主视图。。。
define(['ministry', 'jquery', 'models/m-version-info', 'views/about/v-edit-version-info-entry', 'text!templates/version-info/version-info.html'],
function(Ministry, $, VersionInfo, VersionInfoEditView, TemplateSource) {
var versionInfoEntriesView = Ministry.View.extend({
el: '#mainAppArea',
template: Handlebars.compile(TemplateSource),
versionInfoEditView: null,
initialize: function () {
this.$addEntryArea = $('#addVersionInfoEntryArea');
this.$addEntryButton = $('#addVersionInfoEntryButton');
},
events: {
'click #addVersionInfoEntryButton': 'showAddEntry'
},
render: function () {
var that = this;
var entries = new VersionInfo.Collection();
entries.fetch({
success: function (data) {
that.$el.html(that.template({ items: data.toJSON() }));
}
});
return this;
},
showAddEntry: function() {
if (this.versionInfoEditView != null) {
this.versionInfoEditView.trash();
}
this.versionInfoEditView = new VersionInfoEditView({ el: this.$addEntryArea });
this.$addEntryButton.hide();
this.versionInfoEditView.render();
return false;
}
});
return versionInfoEntriesView;
});
这是孩子们的观点。。。
define(['ministry', 'models/m-version-info', 'text!templates/version-info/edit-version-info- entry.html', 'jquery.custom'],
function (Ministry, VersionInfo, TemplateSource) {
var editVersionInfoView = Ministry.View.extend({
template: Handlebars.compile(TemplateSource),
initialize: function () {
this.$dbVersionInput = this.$('#dbVersion');
this.$tagInput = this.$('#tag');
},
render: function () {
this.$el.html(this.template());
return this;
},
events: {
'submit .edit-version-info-form': 'saveEntry'
},
saveEntry: function() {
var entry = new VersionInfo.Model({ dbVersion: this.$dbVersionInput.val(), tag: this.$tagInput.val() });
entry.save({
success: function() {
alert('Your item has been saved');
}
});
return false;
}
});
return editVersionInfoView;
});
主模板。。。
<h2>Version Info</h2>
<div id="info">
<a id="addVersionInfoEntryButton" href="#/versioninfo">Add manual entry</a>
<div id="addVersionInfoEntryArea">
</div>
<ul id="items">
{{#each items}}
<li>{{dbVersion}} | {{tag}}</li>
{{/each}}
</ul>
</div>
编辑模板。。。
<form class="edit-version-info-form">
<h3>Create a new entry</h3>
<label for="dbVersion">DB Version</label>
<input type="text" id="dbVersion" maxlength="10" />
<label for="tag">Tag</label>
<input type="text" id="tag" />
<button type="submit" id="newEntryButton">Create</button>
</form>
我是个新手,所以我很可能做了一些完全错误的事情,但到目前为止,我看不出这种方法有什么错误,也没有出现任何错误。
好的-经过一些面部护理后按如下方式修复。。。
define(['ministry', 'jquery', 'models/m-version-info', 'views/about/v-edit-version-info-entry', 'text!templates/version-info/version-info.html'],
function(Ministry, $, VersionInfo, VersionInfoEditView, TemplateSource) {
var versionInfoEntriesView = Ministry.View.extend({
el: '#mainAppArea',
template: Handlebars.compile(TemplateSource),
versionInfoEditView: null,
$addEntryArea: undefined,
$addEntryButton: undefined,
initialize: function () {
},
events: {
'click #addVersionInfoEntryButton': 'showAddEntry'
},
render: function () {
var that = this;
var entries = new VersionInfo.Collection();
entries.fetch({
success: function (data) {
that.$el.html(that.template({ items: data.toJSON() }));
that.$addEntryArea = that.$('#addVersionInfoEntryArea');
that.$addEntryButton = that.$('#addVersionInfoEntryButton');
}
});
return this;
},
showAddEntry: function (e) {
e.preventDefault();
if (this.versionInfoEditView != null) {
this.versionInfoEditView.trash();
}
this.versionInfoEditView = new VersionInfoEditView({ el: this.$addEntryArea });
this.$addEntryButton.hide();
this.$addEntryArea.append('Do I want to put it here?');
this.versionInfoEditView.render();
}
});
return versionInfoEntriesView;
});
这个问题是由于我在渲染完成之前在视图中设置了内部元素变量,所以这些元素什么都没有链接。我通过将元素初始化提取到rendersuccess回调的末尾来解决这个问题。
下面是修复程序。。。
define(['ministry', 'jquery', 'models/m-version-info', 'views/about/v-edit-version-info-entry', 'text!templates/version-info/version-info.html'],
function(Ministry, $, VersionInfo, VersionInfoEditView, TemplateSource) {
var versionInfoEntriesView = Ministry.View.extend({
el: '#mainAppArea',
template: Handlebars.compile(TemplateSource),
versionInfoEditView: null,
$addEntryArea: undefined,
$addEntryButton: undefined,
initialize: function () {
},
events: {
'click #addVersionInfoEntryButton': 'showAddEntry'
},
render: function () {
var that = this;
var entries = new VersionInfo.Collection();
entries.fetch({
success: function (data) {
that.$el.html(that.template({ items: data.toJSON() }));
that.$addEntryArea = that.$('#addVersionInfoEntryArea');
that.$addEntryButton = that.$('#addVersionInfoEntryButton');
}
});
return this;
},
showAddEntry: function (e) {
e.preventDefault();
if (this.versionInfoEditView != null) {
this.versionInfoEditView.trash();
}
this.versionInfoEditView = new VersionInfoEditView({ el: this.$addEntryArea });
this.$addEntryButton.hide();
this.$addEntryArea.append('Do I want to put it here?');
this.versionInfoEditView.render();
}
});
return versionInfoEntriesView;
});
这个问题是由于我在渲染完成之前在视图中设置了内部元素变量,所以这些元素什么都没有链接。我通过将元素初始化提取到rendersuccess回调的末尾来解决这个问题。
相关文章:
- 将日期时间作为 JSON 发送将无法在我的视图中正确显示
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- 为什么我的视图没有显示在角度ui视图中
- 为什么我无法在我的视图中看到这个变量
- 为什么我的视图模型不起作用
- 如何在我的视图中打印JavaScript代码
- Knockout JS将我的视图模型创建更改为使用映射pulgin
- 如何使用JS函数在我的视图中显示ViewBag的值
- KnockoutJS 绑定在我的视图模型实际创建之前应用
- 我的视图模型不会根据 JSON 结果淘汰来增加数字
- 用AngularJS清理我的视图
- 为什么我的视图在骨干中的数组长度不正确
- Knockoutjs:如何将单个项目从可观察数组传递到我的视图模型中
- Ajax响应并没有改变我的视图模型
- 将参数从我的视图(页面)传递到我的js文件
- 无法使用逻辑从主干路由器路由到我的视图
- 在我的视图页面中实现两个select
- 通过添加“更改”方法,我的视图不再绑定到它
- 使用AngularJS在我的视图中的另一个json中渲染json
- json对象直接从我的视图HTML