2012-02-25 2 views
2

これは長時間の撮影です。backbone.jsは、asp.net mvc viewmodelから大きなネストされたモデルを移入します。

私はバックエンドでasp.net mvcを使用しています。私はいくつかの単純なプロパティだけでなく、オブジェクトとその上にオブジェクトのコレクションを持つjsonのviewmodelを返すアクションを持っています。例えば

public class ViewModel 
{ 
    public string Name {get;set;} 
    public Person Person {get;set;} 
    public IEnumerable<SleectListItem> UserTypes {get;set;} 
} 
public class Person 
{ 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
    public int UserType {get;set;} 
} 

SelectListTypeは、アイデアは、あなたが人を作ることができ、フォームがあることがあることに「テキスト」と「価値」と「選択」のプロパティで

だけで名前と値のペアでありますそこに名字と姓を記入し、ドロップダウンリストからユーザータイプを選択します。

になり、サーバから返されたJSONを渡すことによって、このような

app.MyViewModel=Backbone.Model.extend(); 
app.Person=Backbone.Model.extend(); 
app.SelectListItem=Backbone.Model.Extend(); 
app.UserTypes=Backbone.Collection.Extend({ 
    model:app.SelectListType 
}) 

としてBACKBONE.JSモデルのセットをしているとMyViewModelを移入することができている私は何をできるようにしたいと思い

このようなもの

{Name:'SomeName', 
Person:{ 
    FirstName:'Frank', 
    lastName:'Jones' 
}, 
UserTypes:[{Text:'Admin', 
     Value:1, 
     selected:false}, 
     {text:'peon', 
     Value:2, 
     selected:false} 

これは私が知っている伝統的な方法ではありません。私は、各オブジェクトや何かを1回呼び出すことになっていると思いますが、実際にはサーバー上で1回だけ呼び出すだけで、必要なデータをすべて取得できます。

すべての種類のループを作成して、さまざまなコレクションにデータを取り込むことができます。データが到着したら、これを行うより効率的な方法はありませんか?サーバー上で

答えて

1

チェbackbone-relationalアウトCK:

あなたが関係を設定する場合は、そのページ上の例のように何かを行うことができます:

paul = new Person({ 
id: 'person-1', 
name: 'Paul', 
user: { id: 'user-1', login: 'dude', email: '[email protected]' } 
}); 

// A User object is automatically created from the JSON; so 'login' returns 'dude'. 
paul.get('user').get('login'); 

そうでない場合、あなたはおそらくパースを(オーバーライドすることによって、あなたが望むものを達成できる)とtoJSON ()をMyViewModelに追加します。

+0

私はバックボーン・リレーショナルを見てきましたが、必要なことをすることができないと確信していました。私が必要としないものがたくさんあるように見えますが、それがうまくいくなら、それは価値があります。偉大になるでしょう。ありがとう – Raif

1

public ActionResult Index() 
{ 
    ViewModel model = ... 
    return View(model); 
} 

とクライアント上:

@model ViewModel 
<script type="text/javascript"> 
    var model = @Html.Raw(Json.Encode(Model)); 
    // TODO: the model variable here will represent the 
    // structure you are looking for so you can hook it 
    // up with backbone 
</script> 

、あなたはASP.NET MVC 2を使用していて、Json.Encodeヘルパーがあなたの利用できないWebフォームは、エンジンを表示する場合クラスを直接使用できます。

<script type="text/javascript"> 
    var model = <%= new JavaScriptSerializer.Serialize(Model) %>; 
    // TODO: the model variable here will represent the 
    // structure you are looking for so you can hook it 
    // up with backbone 
</script> 
+0

はい、これは私にjavascript変数のjsonを与えますが、私のバックボーンモデルには挿入されません。 – Raif

+0

@Raif、申し訳ありません、あなたの質問を理解できませんでした。それはバックボーンに関連しており、ASP.NET MVCとは何の関係もないようです。 –

+0

これは、サーバーがmvcを実行していて、クライアントに返す豊富なビューモデルを生成している点を除いて正しいです。バックボーンは一般的に、個々のデータを取り込むサーバーへの各オブジェクト呼び出し、または一度に多くのデータを送信するのではなく、モデルの各タイプを持つことを(私が正しく理解していれば)支持する。 – Raif

関連する問題