0

もう、本当に、よくわかりません。Knockout を使用してインターフェイスを開発しようとしていますが、「toJSON」しようとすると頭が痛くなります。

問題は次のとおりです。

  • FormViewModel があります。このフォームには、フォーム自体に関するロジックとメタ データ (観察可能データ) が含まれています。
  • 私は FormSection を持っていますが、これには 2 つのオブザーバブルしかありません。
  • 私には削除があり、観測可能なものは2つだけです。

JSONオブジェクトを受け取るPHPファイルにAJAXをしたいのですが、ここから先に進む方法がわかりません。すべてではなく、いくつかのオブザーバブルが必要です。また、Ajax 呼び出し (JSON を使用) から初期状態をロードできるようにしたいと考えています。

私のコードの関連部分は次のとおりです。

    // This only has some observables
    var FormSection = function(number)
    {
        var self = this;
        this.title = ko.observable('Section ' + number);
        this.selectedPageStyle = ko.observable();

    };

    // Only observable / computed
    var Deletion = function(page)
    {
        var self = this;
        // reference to a just deleted page, to make 'undeletion' possible
        this.page = page;
        this.pageTitle = ko.computed(function(){ return self.page.title() });

    };

ここまでは順調ですが、いくつかのオブザーバブルや機能などを備えた ViewModel を取得しました。

var FormViewModel = function(data)
{
    var self = this;

    this.pages = ko.observableArray([]);
    this.deletions = ko.observableArray([]);
    this.name  = ko.observable();
    this.description = ko.observable();
    this.availablePageStyles = ko.observableArray(['Header', 'Fields', 'Signatures']);

    this.hasPages = ko.computed(function(){}, this);

    this.numberOfPages = ko.computed(function(){}, this);

    self.selectedPage = ko.observable( );
    self.isPageSelected = function(page) {};
    self.clearPage = function(data, event) {};

    this.save = function() {
        $.ajax("x", {
            // WHAT TO DO?!
            data: { data: ko.toJSON(this)},
            type: "post",
            //success: function(result) { alert(result) },
            error : function(jqXHR, textStatus, errorThrown) { alert(textStatus + errorThrown)}
        });
    };

    $.getJSON("x", function(allData) {
        // How to populate back?!
    });

    this.addPage = function(data, event){}
    this.removePage = function(page){}
    this.unremovePage = function(deletion){}

};

関連するオブザーバブルを保存したい場合、どうすればよいかわかりません。例: は必要ありませんself.selectedPage。私はそれを並べ替えにのみ使用します。

  • ここでマッピングを使用しますか?
  • 関連するオブザーバブルをマッピングする方法は?
  • それをJSONに入れるにはどうすればよいですか?
  • サーバーから受信した JSON から「マップ バック」するにはどうすればよいですか?
4

1 に答える 1

3

ko.toJSON を使用するときに JSON に変換されるものを制御するには、次のようにして関数をオーバーロードできます。

viewModel.prototype.toJSON = function(){
    var copy = this;
    delete copy.//whatever variables you don't want to return to server here
    //any other variables you want to not return
    return copy;
}

サンプルのフィドルhttp://jsfiddle.net/Rynan/hA4Kz/をまとめました。

詳細とサンプルについては、http: //www.knockmeout.net/2011/04/controlling-how-object-is-converted-to.html を参照してください。

于 2012-09-11T14:23:15.963 に答える