0

使用 JMVC 我有这个问题:这条线不起作用:this.element.append('hello');

这是我的控制器:

steal('jquery/controller', 
    'jquery/dom/form_params',
    'jquery/view/ejs',
    'jquery/controller/view')
.then(
    './home.css',
    function($){
        $.Controller("Wg.Home",

        {
            defaults : {
                defaultText : "Search for things here"
            }
        },

        {


            init : function(){
                this.render();
            },

            render : function(){
                $("body").addClass("home");

                this.rendered = true;
                this.element.html(this.view(this.options));
            this.element.append("<div>Hi there</div>");
            }, ...

我需要在视图渲染后操作 EJS html,但我不能。我想念什么?谢谢

更多信息:

我以这种方式从 router.js 运行我的控制器:

this.home = new Wg.Home(this.container);

this.container 是:

this.container = $('#page');

我的 init.ejs 是:

<div class="form-container">
    <form action="" method="get" class="form-wrapper clearfix">

    <input type='text' placeholder="<%=defaultText%>" name='q' id="q" class='blurred'/>
    <button type="submit">Search</button>

    </form>
</div>

我没有错误。

4

1 回答 1

1

根据下面的评论,我认为已经理解了您的问题。您正在以这种方式调用视图:

 this.element.html(this.view('init',{'artists' : Wg.Models.Artists.findAll()}));

你需要看看这个语句ˋWg.Models.Artists.findAll()ˋ。这只不过是一个异步jQuery ajax 调用的包装器。JavaScriptMVC 在 ˋthis.viewˋ 方法中添加了对直接处理异步 ajax 调用的支持,该方法通过 jQuery Deferreds 完成。这意味着当您调用上述指令时,会发生什么

  • 对服务器的异步调用开始(由ˋWg.Models.Artists.findAll()ˋ定义)
  • 当结果返回时,视图(取自本地缓存或获取)并与输出一起呈现。

然而问题是 ˋthis.element.append(...)' 是在 ajax 调用返回之前完成的,基本上你的 ˋinitˋ 视图是在你的 ˋthis.element.append(...)ˋ 发生之后呈现的。

您可以尝试执行以下操作:

var self = this;
Wg.Models.Artists.findAll({}, function(data) {
    //this is the success callback when the data has been fetched
    self.element.html(this.view('init', { artists: data }));
    self.element.append('<div>hi there</div>');
});

试试这是否适合你。

//编辑:

文档中的这篇文章可能会很有帮助:

于 2013-01-12T10:51:08.330 回答