1

私はバックボーンが初めてで、チュートリアルに従っており、ローカル ストレージをデータベースとして使用しようとしていますが、それらを一緒に使用する方法について説明している記事を見つけることができませんでした。

これはコードです:

$(function() {
window.app = {
    Models: {},
    Collections: {},
    Views: {}
};

window.template = function(id) {
    return _.template($('#' +  id).html());
}

//Item model
app.Models.Item = Backbone.Model.extend({
    defaults: {
        title: ''
    }
});




//items collection
app.Collections.ItemsList = Backbone.Collection.extend({
    // reference to the model
    model: app.Models.Item,

    //save all items in local storage
    localStorage: new Backbone.LocalStorage('items-store')
});




//the items list
app.Views.Items = Backbone.View.extend({
    tagName: 'ul',

    initialize: function() {
        this.collection.on('add', this.addOne, this);
    },

    render: function() {
        //for each element in the collection call the add one function
        this.collection.each(this.addOne, this);
        return this;
    },

    addOne: function(itemModel) {
        // create a new child view
        var itemView = new app.Views.Item({model: itemModel});
        //append to the root element
        this.$el.append(itemView.render().el);
    }
});




// one item view
app.Views.Item = Backbone.View.extend({
    //tag name of the view
    tagName: 'li',

    template: template('itemTemplate'),

    events: {
        'click .edit': 'editModel'
    },

    initialize: function() {
        //rerender the model whet the text is changed
        this.model.on('change', this.render, this);
    },

    render: function() {
        //render the template
        var template = this.template(this.model.toJSON());
        //tale the list item and populate it with the associated model
        this.$el.html(template);
        return this;
    },

    editModel: function() {
        //prompt the user to change the text
       var newValue = prompt('You want to change the text?', this.model.get('title'));
       //if cancel is pressed
       if(!newValue) { return};
       //add the new value to the model
       this.model.set('title', newValue);
    }
});




//add new item view
app.Views.AddItem = Backbone.View.extend({
    el: '#addItem',

    collection: new app.Collections.ItemsList,

    events: {
        'submit' : 'submit'
    },

    initialize: function() {
        this.collection.fetch({reset: true});

        //call the Items view
        var items = new app.Views.Items({collection: this.collection});
        //populate the itemsList  with the ul
        $('#itemsList').html(items.render().el);

        //this is just for demo purpose
        this.store();
    },

    submit: function(e) {
        e.preventDefault();
        //get the value from the input
        var newTaskTitle = this.$el.find('input[type=text]').val();
        //create a new model with the value from newTaskTitle
        var item = new app.Models.Item({title: newTaskTitle});
        //create the collection in order to trigger the localstorage plugin
        this.collection.create(item);

        //this is just for demo purpose
        this.store();
    },

    store: function() {
        //this is just for demo purpose
        //items in local storage
        for(var i = 0; i < localStorage.length; i++) {
            var obj = localStorage.getItem(localStorage.key(i));
            $('.number span').html(localStorage.length);
            $('#localStorage').append('<div>' + i + '---' + obj + '</div>');

        }

    }
});

//dummy collection
var itemsCollection = new app.Collections.ItemsList([
    {
        title : 'go home'
    },
    {
        title : 'go home1'
    },
    {
        title : 'go home2'
    }
]);

//call the view with the dummy collection
// var addItems = new app.Views.AddItem({collection: itemsCollection});

// //call the view without the collection
var addItems = new app.Views.AddItem();  
//end of function
}());

編集: コードが変更され、jsfiddle が更新されました: http://jsfiddle.net/9z0cc6r8/1/

私は、バックボーン localstorage プラグインが次のようにモデルをブラウザのローカル ストレージに保存することを発見しました: this.collection.create(item); しかし、ページを更新すると、コレクションからアイテムが消え、ページに再度表示されません。

ローカルストレージからページにアイテムを表示する方法を知っている人はいますか? モデルに対して編集および削除アクションを実行したいので、それを行った後でもモデルへのアクセスが必要です。

PS js fiddle では問題なく動作するようです。しかし、ローカルではそうではありません。

4

1 に答える 1

0

私はこのライブラリを使用しています: https ://github.com/jeromegn/Backbone.localStorage

そして、それがコレクションでそれを定義する方法です:

localStorage: new Store("your-storage")

その後、モデルはlocalStorageで自動的に動作します。

于 2016-07-19T17:26:19.123 に答える