0

いくつかの問題に直面していますが、マッピングプラグインを使用することで自分の生活が楽になるかもしれないということが起こったとき、私はモデルシステムを構築していました。

問題は、初期化の時点ではデータがないということですが、それでも画面に空のプロパティを提供したいと思います。初期化時にモデルを定義し、後でモデルを値で更新することで、これを可能にしました。

App.Models.User = {
    name: null,
    username: null,
    gender: null,
    email: null,
    img: null
};
var me = ko.mapping.fromJS(App.Models.User);

これは非常にうまく機能しましたが、これがタスクを実行するための最良の方法であるかどうかはわかりません。

しかし、今、imgプロパティを更新したいのですが、それから新しいプロパティを作成するのか、そのプロパティ自体を更新するのかはまだわかりません。両方のシナリオを実行する方法を知りたいと思います。

サーバーからの私のデータはこのように見えます

{"me":
    {
        "username"      :"john",
        "email"         :"johndoe@gmail.com",
        "name"          :"John Doe",
        "gender"        :"male",
        "img"           :"profile_img_john.jpg"
    }
}

imgを更新するか、そこから新しいプロパティを作成して作成しますimages/profile_img_john.jpg

それが理にかなっていることを願っています。

4

1 に答える 1

0

ノックアウトビューモデルの作成と初期化の部分を分割します。これにより、最初に実際のデータなしでビューモデルを作成し、それをHTMLにバインドしてから、実際のデータで更新することができます。

ここで私が作成した例を参照してください:http://jsfiddle.net/apuchkov/zscP2/

var data = { "me":
    {
        "username"      :"john",
        "email"         :"johndoe@gmail.com",
        "name"          :"John Doe",
        "gender"        :"male",
        "img"           :"profile_img_john.jpg"
    }
} 

var User = function(data) {
     this.name = ko.observable();
     this.username = ko.observable();
     this.gender = ko.observable();
     this.email = ko.observable();
     this.img = ko.observable();

     this.update(data);
 };

ko.utils.extend(User.prototype, {
    update: function(data) {
        this.name(data.name || "");
        this.username(data.username || "");
        this.gender(data.gender || "");
        this.email(data.email || "");
        this.img(data.img || "default-image-url.png");
    }
});

//firstly create viewmodel without any data
var user = new User({});
ko.applyBindings(user);

//then set data later 
user.update(data.me);
于 2013-02-20T15:59:36.520 に答える