1

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

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

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

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 来选择inputordiv标记会更好,还是有一个我没有想到的更好的解决方案?

4

1 回答 1

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()只返回与请求的路由关联的布尔值。

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

此外,就我而言,可编辑/静态视图完全不同,因此我创建了两个单独的模板。

于 2013-06-09T22:42:20.117 回答