5

私は、ホット タオル SPA は言うまでもなく、MVC についておそらく最も経験の浅い人物ですが、これらのテクノロジに基づくシステムを作成することが期待されています。

Breeze の Web サイトと John Papa のすべてのドキュメントを読みましたが、データベースへのインタラクションを作成し、データを取得して表示し、データの削除を含めてデータを追加または編集する方法がわかりません。

画面上に約 5 つのグリッドを表示するダッシュボードを作成して、時間計算を行っているライブ データを表示する必要があります。

これまでの 2 日間は、プロジェクト名を表示するようにホット タオル テンプレートを修正し、ホット タオルのアイコンを変更しただけです。このようなことに頭を悩ませることはできません... 2年間、私は3層アーキテクチャのASP.NET Webサイト開発者です。

このテンプレートを介してデータを渡す方法に関するガイドラインを誰か教えてもらえますか?

4

1 に答える 1

6

私はホットタオルSPAから始めましたが、ここで見つけることができるDurandal MovieAppサンプルのような他の参照を使用しました. http://stephenwalther.com/archive/2013/02/08/using-durandal-to-create-single-page-apps.aspx . また、サンプルを含む Breezejs ランタイムをダウンロードして確認しました。

私のシナリオでは、Entity Frameworks で SQL を使用し、WEBAPI コントローラーを作成して、breezejs のドキュメントに従いました。私のコントローラー以外は以下です。

 [BreezeController]
public class ProjectBillingController : ApiController
{
    readonly EFContextProvider<ProjectBillingContext> _contextProvider =
   new EFContextProvider<ProjectBillingContext>();

    // ~/api/todos/Metadata 
    [HttpGet]
    public string Metadata()
    {
        return _contextProvider.Metadata();
    }


    [HttpPost]
    public SaveResult SaveChanges(JObject saveBundle)
    {
        return _contextProvider.SaveChanges(saveBundle);
    }

    [HttpGet]
    public IQueryable<Client> Clients()
    {
        return _contextProvider.Context.Clients;
    }
    ...

そこで、デュランダルムービーアプリのコードとディレクトリ構造を真似してみました

/App 
/App/respositories 
/App/repositories/repository.js
/App/viewmodels 
/App/viewmodels/clients
/App/viewmodels/clients/show.js 
/App/viewmodels/clients/edit.js
/App/viewmodels/clients/create.js 
/App/views/clients
/App/views/clients/show.html 
/App/views/clients/edit.html
/App/views/clients/create.html

私の場合、複雑なクエリではなかったので、1 つのリポジトリを使用しましたが、私にとってはそれが始まりでした。

しかし、私のリポジトリ内には、すべての行と1行を取得するために、定義済みのbreezejsエンティティマネージャーといくつかの関数を配置しました。コードの抜粋を以下に示します。

// repository.js
function getRecordLists(modelsListsObservable, errorObservable, entity) {

    return breeze.EntityQuery
    .from(entity)
    .using(manager).execute()
    .then(querySucceeded)
    .fail(queryFailed);

    function querySucceeded(data) {
        modelsListsObservable(data.results);
        logger.log('Fetched ' + entity, null, null, true);

    }

    function queryFailed(error) {
        errorObservable("Error retrieving" + entity + " : " + error.message);
        logger.error("Error retrieving" + entity + " : " + error.message, null, null, true);

    }
};


function getRecord(id, clientObservable, errorObservable, entity, entityKey) {
    return breeze.EntityQuery.from(entity)
    .where(entityKey, "==", id)
    .using(manager).execute()
    .then(querySucceeded)
    .fail(queryFailed);

    function querySucceeded(data) {
        clientObservable(data.results[0]);
        logger.log('Fetched a record from ' + entity, null, null, true);
    }

    function queryFailed(error) {
        errorObservable("Error retrieving a record from " + entity + ": " + error.message);
        logger.error("Error retrieving a record from " + entity + ": " + error.message, null, null, true);
    }

};

// show.js
define(function (require) {

    var repository = require("repositories/repository");
    var app = require('durandal/app');
    var router = require("durandal/plugins/router");
    var logger = require('services/logger');
    var models = ko.observableArray();
    var error = ko.observable();

    return {
        models: models,
        error: error,
        deleteRecord: deleteRecord,

        activate: function (data) {
            return repository.getRecordLists(models, error, "Resources");
        }
    };

これが少しお役に立てば幸いです。私もこれを学んでおり、いくつかのことはベストプラクティスではないかもしれませんが、私が学ぶには十分です.

ありがとう

于 2013-03-07T18:52:57.703 に答える