2

特定の入力に対するスタイル付きバルーンでの検証メッセージの表示を処理するバックボーンを使用して、検証ビューの作成に取り組んでいます。この機能を処理する新しいビューを作成しました。検証を実行してビューをレンダリングするために、モデル内に次の関数をセットアップしました。

   Dashboard.Models.EventModel = Backbone.Model.extend({
    idAttribute: "Id",

    // Model Service Url
    url: function () {
        var base = 'apps/dashboard/EventsDetails';
        return (this.isNew()) ? base : base + "/" + this.id;
    },

    validate: function (attrs) {
        var validTime = (attrs.Time) ? attrs.Time.match(/^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/) : true;

        if (!validTime) {
            new Dashboard.Views.ValidationMessageView({
                $container: $('#txtNewEventTime'),
                message: 'Invalid Time'
            }).render();

                    return 'error';
        };

    }

});

私の質問: その新しいビュー (ValidationMessageView) を作成し、モデル内からレンダリングすることは標準に反しますか?

4

1 に答える 1

2

IMHO: はい!.. 見た目はあまり良くありません。

Viewの外側でをインスタンス化する必要がありますModel

モデルでイベントバインドし、外部からキャプチャして、そこでインスタンス化する必要があります。 errorErrorView

ドキュメントの例を確認してくださいModel.validate

あなたはこのようなものを持つことができますが、速いですAllErrorsView

// code simplfied and not tested
var AllErrorsView = Backbone.View.extend({
  initialize: function(){
    this.model.on( "error", this.showError, this );
  },

  showError: function( model, error ){
    if( error == "txt_new_event_time" ) {
      new Dashboard.Views.ValidationMessageView({
        el:         "#txtNewEventTime",
        message:    "Invalid Time"
      }).render();
    }

    // ... more errors
  }

});

var myAllErrorsView = new AllErrorsView({ model: myModel });

あなたのコードに見られる奇妙なことはそれだけではないと言わざるを得ません。たとえば、実装の意味がわかりません。 Model.urlRoot 属性Model.urlで解決できると思います。

于 2012-04-26T18:04:49.703 に答える