簡體   English   中英

在Backbone.js中尋找有關MVC的指南

[英]Looking for guidance on MVC in Backbone.js

根據MVC,模型是“純”數據表示。 您不希望在其中存在演示數據或非DRY數據。 例如,如果您的模型具有“ comment_count”字段,則它也不應包含“ use_plural”字段,這樣您就可以知道要打印“ comment”還是“ comments”。

This post has 0 comments
This post has 1 comment
This post has 2 comments
...

如果將這些信息放在模型中,則關注點分離很差,但是,替代方法是在視圖中派生該信息。 例如:

var FooView = Backbone.View.extend({
  render: function(){
    this.data = this.model.toJSON();
    this.data.use_plural = this.data.comment_count === 1;
    // and fifty more lines like the above
    $(this.el).html(ich['foo_template'](this.data));
  }
});

我的問題是,似乎需要中間數據過於視圖化而無法成為模型的一部分,但過於模型化而無法成為視圖的一部分。 那是MVVM解決的問題嗎? 我查了一下,但似乎非常特定於Microsoft技術堆棧。 我正在考慮將其放入函數中並從render()方法中調用它:

function deriveData(model){
  var data = model.toJSON();
  data.use_plural = data.comment_count === 1;
  // and fifty more lines like the above
  return data;
}

var FooView = Backbone.View.extend({
  render: function(){
    this.data = deriveData(this.model);
    $(this.el).html(ich['foo_template'](this.data));
  }
});

var BarView = Backbone.View.extend({
  render: function(){
    this.data = deriveData(this.model);
    $(this.el).html(ich['bar_template'](this.data));
  }
});

另一個想法是擁有一個AbstractView類並從中繼承,如下所示:

var AbstractView = Backbone.View.extend({
  deriveData: function(){
    this.data = this.model.toJSON();
    this.data.use_plural = this.data.comment_count === 1;
    // and fifty more lines like the above
  }
});

var FooView = AbstractView.extend({
  render: function(){
    this.deriveData();
    $(this.el).html(ich['foo_template'](this.data));
  }
});

var BarView = AbstractView.extend({
  render: function(){
    this.deriveData();
    $(this.el).html(ich['bar_template'](this.data));
  }
});

倒不是讓我感到難過,我只是想確保我不會在無知中漂浮,而有一種很棒的方法可以解決這個確切的問題。 是否有人有任何建議或想法,或者在這里可以利用完善的模式? 謝謝。

這是個人觀點(即使它來自長期的經驗並為許多人所共有),因此請帶一點鹽。

MVC模式只是不太適合網絡。 問題似乎總是在控制器中 很多已經存在了一段時間的人都知道這一點並默默接受。 大多數框架使用術語MVC作為分類,因為很好,可以方便地用模式術語解釋框架的目標,並且大多數其他類似框架也使用該術語。

如果您確實需要給誰是View和Backbone中的Controller是一個含義,大多數人都認為它們都是View。 視圖不僅可以生成模板,還可以將事件從UI分發到模型,反之亦然。 如果確實需要將它們分開,則還可以認為View類是Controllers ,而模板是Views

希望您能想到: 叫什么都沒關系 盡管使用方式很重要。

關於您的問題的實際部分:根據情況,我會使用其中任何一個。 您一次使用的東西很小嗎? render里面render 它是否是您的View體系結構的一部分,並且在多個視圖中都需要邏輯? 從基類派生。 處理其他所有事情的方式相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM