基于用户组的主干读取/编辑视图

时间:2013-01-19 02:16:23

标签: backbone.js

我创建了一个简单的骨干应用程序,效果很好。 现在我需要解决一个问题,我遇到了麻烦。所以我寻求建议。

我需要在每个用户/组的基础上以只读或可编辑的方式表示我的模型/集合。

我最初的想法是,创建两个模板(读取和编辑)及其各自的视图。 (伪码):

var appRouter = Backbone.Router.extend({
  routes: {
       '' : 'schedule',
  }
  schedule: function() {
    this.collection = new Collection();
    this.collection.fetch({success:function(resp) {
                                   if (resp.group == 'allowedToEdit')
                                     myview = new editView(this.collection);
                                   else 
                                     myview = new readView(this.collection);
                                   }});
});

这种方法最终让我不得不复制模板:

<script type="text/template" id="edit-template">
  <div class="myclass">
    <input class="fn" type="text" value="<%= (fn) != '' ? fn : 'default' %>">
  </div>
</script>

<script type="text/template" id="static-template">
  <div class="myclass">
    <div class="fn"><%= fn %></div>
  </div>
</script>

内联javascript选择inputdiv代码会不会更好?或者有一个更好的解决方案我没想到?

1 个答案:

答案 0 :(得分:0)

这就是我最终做的事情:

我创建了一个用户模型,其中包含用户首选项和布尔值(如果允许用户编辑,则根据用户权限从数据库返回)。

结果代码是:

var appRouter = Backbone.Router.extend({
  routes: {
     '' : 'schedule',
  }
  schedule: function() {
    this.collection = new Collection();
    this.collection.fetch({
      success:function(resp) {
        myview = user.schedule() ? new editView(this.collection)
                                 : new readView(this.collection);
        myview.render();
    }});
 });

函数user.schedule()只返回与请求的路由关联的布尔值。

后端的权限受组限制 - 因此,如果用户手动更改这些布尔值 要访问可编辑页面 - 他们仍然没有授权后端来操作数据。

另外,在我的例子中,可编辑/静态视图非常不同,因此我创建了两个单独的模板。