javascript - 如何在 ember.js 中构建评论系统

标签 javascript ember.js flask-sqlalchemy

我是 ember.js 的新手。我目前正在开发一个学校项目,该项目本质上是一个留言板(论坛)应用程序,允许用户添加带有评论的帖子。

我的应用程序包含三个模型:类(class)、消息、评论

类(class)->hasMany->消息->hasMany->评论

到目前为止,我已经能够使用服务器的过滤器查询来查看所有类(class)和相关消息。添加新消息也可以正常工作,只是它不会更新添加到屏幕上的新消息。

问题:只有当我刷新页面时,才会显示我添加的新消息。

App.Router.map(function() {
    this.resource('home', { path : '/'}, function() {
        this.resource('mycourse', { path : ':course_id' } );
    });
});

App.MycourseRoute = Ember.Route.extend({
    model: function(params) {
        // the model for this route is a new empty Ember.Object
        var string = '{"filters":[{"name":"courseid","op":"eq","val":'+params.course_id+'}]}'
        return this.store.find('message', { q: string });
    }
 });

App.HomeRoute = Ember.Route.extend(
{
    model: function() {
        return this.store.find('course');
    }
});

这是我的消息 Controller :

App.MycourseController = Ember.ArrayController.extend({

        actions: {

                addMessage: function(messageText) {
                        var message = messageText;

                        var messageAdd =this.store.createRecord('message', {
                                message: message,
                                posttime: "12:00pm",
                                courseid: 4,
                                userid: 1
                        });

                        messageAdd.save();
                }
        }

});

我的 html 部分:

 <script type="text/x-handlebars" id="home">
      <div class="row">
        <div class="col-sm-3 col-md-2 sidebar">
          <ul class="nav nav-sidebar">
            {{#each}}
            <li>{{#link-to 'mycourse' this.id}}{{name}}{{/link-to}}</li>
            {{/each}}
          </ul>
        </div>

        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
        <h1 class="page-header">Subscribed Courses:</h1>
        {{outlet}}
        </div>
      </div>
 </script>

 <script type="text/x-handlebars" id="mycourse">
        <button class="btn btn-default" type="button" id="create-message" {{action "addMessage" messageTxt}}>
        Post!
        </button>
      {{input type="text" value=messageTxt}}
      <br><br>

      {{#each}}
        <b>{{message}}</b>

        <li>{{posttime}}</li>
        <li>User name: {{user.username}}</li>
        <li>Course name: {{course.alt_name}}</li>
        <h4>Comments:</h4>
        {{#each comments}}
          <li>{{comment}}</li>
        {{/each}}
        <br>
      {{/each}}
 </script>

最佳答案

事实证明,当您使用 findQuery (我相信这与使用带有查询参数的 find 相同)时,Ember 不会返回实时更新数组,而它会返回直接find/findAll。请参阅this question on that exact issue我不久前问过。

这里的解决方案(改编自 kingpin2k 对上述问题的回答)是使用 filter 来欺骗 Ember 自动更新:

App.MycourseRoute = Ember.Route.extend({
    model: function(params) {
        // the model for this route is a new empty Ember.Object
        var string = '{"filters":[{"name":"courseid","op":"eq","val":'+params.course_id+'}]}'
        return this.store.find('message', { q: string });
    },

    setupController:function(controller, model){
      var filter = this.store.filter('color', function(color){
        return model.contains(color);
      }); 

      this._super(controller, filter);
    }
});

关于javascript - 如何在 ember.js 中构建评论系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22549825/

相关文章:

javascript - Vuelidate requiredIf 不适用于复选框

javascript - 用键盘控制 JavaScript 幻灯片

ember.js - Ember : Build error after installing ember-table

python - sqlalchemy.exc.IntegrityError - mySql - 自动增量和数据库存储中的主键错误

javascript - 如何使用原生JS在浏览器中创建node.js风格的可读流?

JavaScript Promise Chaining - 模板文字的问题

javascript - Ember.js 中重新打开()和重新打开类()之间的区别

javascript - 动态 DOM 构建 508 投诉?

python - 如何防止 Flask/SQLAlchemy 模型中出现这种循环引用?

python - 以关键字作为变量的 flask sqlalchemy查询