4

我正在做一个概念验证演示,我需要编写一个表单视图,它可以让我将项目添加到我的内容数组中。我在外部加载这个视图,然后使用处理程序编译它。我添加了一个提交方法并使用了 {{action}} 绑定,但每次单击提交按钮时它都会重新加载页面。我错过了什么?

// 模板

<form>
    <div>
        <label for="client">Client Name</label>
        <input type="text" id="client" placeholder="Add client name" />
    </div>
    <div>
        <button {{action "addClientSubmit" target="PM.addClientView"}}>Add Client</button>
    </div>
    <div>
        <a href="#" {{action "closeWindow" target="PM"}}>close</a>
    </div>
</form>

// 视图代码

PM.addClientView = Ember.View.create({
    templateName: 'addClient',
    classNames: 'overlay',
    addClientSubmit: function(e){
        e.preventDefault();
        console.log('submitting add client form');
        console.log(a,b,c)
    }
});

// 最后这是我将它添加到页面的方式

PM = Ember.Application.create({
    loadView: function(view){
        $.ajax({
            url: viewPath,
            success: function (template) {
                if (!Ember.TEMPLATES[templateName]) {
                    Ember.TEMPLATES[templateName] = Ember.Handlebars.compile(template);
                };
                PM[view + 'View'].appendTo('body');
            }
        });
    }
});

其他一切正常,但是当我单击提交按钮时,页面会重新加载。我确定我遗漏了一些东西,但我不知道它是什么。

4

2 回答 2

6

您可能需要添加type="button"到您的按钮标签。默认设置是type="submit"触发表单提交。

这是一个 jsFiddle:http: //jsfiddle.net/b2CTg/2/

于 2012-06-04T17:49:29.697 回答
1

问题是创建 PM.addClientView 时模板不存在。

尝试更改PM.addClientView = Ember.View.create({PM.addClientView = Ember.View.extend({

和你的成功功能

PM[view + 'View'].create({ template: Ember.Handlebars.compile(template) }).append();

这是一个小提琴:http: //jsfiddle.net/7E5zt/

于 2012-06-05T20:54:41.310 回答