javascript - 如何在 BackBone View 上正确渲染 $el 元素

标签 javascript jquery backbone.js

我有一个 View ,其中有一个非常基本的网站注册用户列表,以及一些选项,例如在同一个 Backbone View 上一起创建、编辑和删除所有选项,并且正在运行。

由于这对我来说是一个学习练习,现在我想将主视图与详细信息 View 或创建 View 解耦,所以我做的第一件事是创建一个用于创建用户的新 View ,这是一个非常基本的表单上面有 4 个字段。

这是主视图上调用创建用户 View 的代码

userCreate: function () {
  event.preventDefault();
  var createView = new viewAdminCV();
  createView.render();
}

这是 viewAdminCV() View 上的渲染函数

el: $('#frameDetails'),

render: function() {
  this.$el.html(templateUserCreate);
}

如果我执行此代码,则不会出现错误,但不会呈现任何内容。如果我更换线路

this.$el.html(templateUserCreate);

$('#frameDetails').html(templateUserCreate);

它工作得很好,但我想了解为什么 $el 在这种情况下不起作用,因为我让它在其他 View 中工作。

感谢您的帮助。

如果需要,完整的代码在此链接中 https://github.com/GabrielBarcia/UsersMod/blob/iss3/public/js/views/admin_CV.js

最佳答案

基本上,您发现 #frameDetails 元素“为时过早”。人们很容易忘记,当您使用他们所谓的“jQuery 元素”实例时,您实际上是在运行一个函数。这意味着在您的代码中,当您在该 Backbone.View 上运行“extend”时,它会尝试查找 #frameDetails。您想要的是在 new viewAdminCV() 中找到该元素(如果我听起来令人困惑,我深表歉意......)。

但是要解决这个问题,有三种方法。一种是传统上,您只需要在没有 jQuery 包装器的情况下播放文字字符串,然后 Backbone 就会找到它:

el: '#frameDetails',

render: function() {
  this.$el.html(templateUserCreate);
}

或者

你可以用处理程序包装它

el: function(){
  return $('#frameDetails')
},

render: function() {
  this.$el.html(templateUserCreate);
}

或者更巧妙的举动是从“admin.js”文件中注入(inject)它。然后,您无需在 viewAdminCV 类中声明“el”属性:

userCreate: function () {
  event.preventDefault();
  $('#btnUserCreate').prop( 'disabled', true );
  var createView = new viewAdminCV({ el: $('#frameDetails') });
  createView.render();
}

关于javascript - 如何在 BackBone View 上正确渲染 $el 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23464344/

相关文章:

javascript - jquery .remove 使用变量作为选择器

javascript - 如何对三个图像使用 globalCompositeOperation?

javascript - jQuery 表过滤器排序不正确

javascript - 未捕获的类型错误未定义不是函数

javascript - 将类的 div 调整为最大

javascript - Backbone.js Collection 不从 api 获取数据

javascript - 如何在 <src> 中调用 javascript 函数?

javascript - 移动重定向不起作用

javascript - Require.js 中的 Backbone.js 模式

backbone.js - 根据全局变量的变化更新 Backbone 模型?