【问题标题】:Render form from view in a template从模板中的视图呈现表单
【发布时间】:2012-11-11 23:17:39
【问题描述】:

我正在评估backbone.js、backbone-forms 和Rails,但我遇到了一些问题......

我有一个视图,我在其中创建了一个新模型和一个表单,并且我想将此表单与其他 html 元素一起显示,所以我使用了一个模板。

expedients_new.js.coffee
------------------------

class Globalbackbone.Views.ExpedientsNew extends Backbone.View

template: JST['expedients/new']

render: ->

@form = new Backbone.Form({
    model: @model
}).render();

console.log(@model.procedencia) 
console.log(@form) 
$(@el).html(@template(expedient: @model, form: @form ))
this

这个视图使用了一个模板,在这个模板中,我想在那里渲染表单,但是我不知道怎么做......

new.jst.eco
-----------

<h1>BackBones with GlobalWeb</h1>

<h2>Adding New Expedient</h2>

<%=@expedient.date%>
<hr>
<%=@form.el%>
<hr>
<%=@form%>

提前致谢,

问候

编辑

我期望表单的当前浏览器输出是: [对象 HTMLFormElement]

【问题讨论】:

  • 您是否在 Backbone.js 之上使用了一些库?因为 Backbone.js 中没有 Backbone.Form。除此之外,在将模型传递给模板时,您可能需要在模型上调用 toJSON(),也许您也需要为您的表单这样做。
  • 是的,我正在使用主干表单,它在问题中,但可能没有得到很好的解释......问题(还没有)不是 toJSON,因为我目前没有看到表单在浏览器中,只需 [object HTMLFormElement]。谢谢

标签: ruby-on-rails-3 backbone.js coffeescript backbone-forms


【解决方案1】:

usage instructions 表示@form 将是一个主干视图:

var form = new Backbone.Form({
    model: user
}).render();

这意味着@form.el 将是您需要插入到 DOM 中的 DOM 元素:

$('body').append(form.el);

如果您查看the source,您会发现Backbone.FormBackbone.View 的子类:

var Form = (function() {
  return Backbone.View.extend({
    //...

您的代码试图将 @form 视为包含 HTML 的字符串:

<%=@form%>

所以你最终会得到一个标准的字符串化版本的 DOM 元素:[object HTMLFormElement]

如果你有这样的想法,我想你会运气更好:

@$el.append(@template(expedient: @model))
@$el.append(@form.el)

在你的模板中:

<h1>BackBones with GlobalWeb</h1>

<h2>Adding New Expedient</h2>

<%=@expedient.date%>
<hr>

那么你的表单应该出现在&lt;hr&gt;之后。

【讨论】:

  • 感谢您的解释!现在它可以工作了,但我已将这一行 @$el.append(@form) 更改为这一行:@$el.append(@form.el)(添加了 .el)如果我想将表单放入其中会发生什么具体地方?您的方法将其添加到最后,我尝试了类似的方法,但它不起作用:$('#form_here').html(@form.el),因为我必须将其替换为@el中的div内容另外,我的模型属性未以当前形式解析,我也必须对此进行调查。再次感谢!
  • @mongeta:对,应该是.append(@form.el),对此感到抱歉。你会想要像this.$('#form_here').html(@form.el) 这样的东西,this.$()this.$el.find() 的快捷方式,this.$el 还不会在 DOM 中,所以只有 $('#form_here') 什么都找不到。
猜你喜欢
  • 2018-09-29
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
相关资源
最近更新 更多