2016-07-20 3 views
0

В настоящее время у меня есть этот код для моего приложения, над которым я работаю. У меня проблемы с позвоночником, надеюсь, вы сможете мне помочь.Backbone.js. сохраняя данные JSON для локального хранилища

LocalStorage-adapter.js

app.adapters.employee = (function() { 

console.log("Loading localstorage adapter module"); 

var findById = function (id) { 

     var deferred = $.Deferred(), 
      employees = JSON.parse(window.localStorage.getItem("employees")), 
      employee = null, 
      l = employees.length; 

     for (var i = 0; i < l; i++) { 
      if (employees[i].id === id) { 
       employee = employees[i]; 
       break; 
      } 
     } 

     deferred.resolve(employee); 
     return deferred.promise(); 
    }, 

    findByName = function (searchKey) { 
     var deferred = $.Deferred(), 
      employees = JSON.parse(window.localStorage.getItem("employees")), 
      results = employees.filter(function (element) { 
       var fullName = element.firstName + " " + element.lastName; 
       return fullName.toLowerCase().indexOf(searchKey.toLowerCase()) > -1; 
      }); 
     deferred.resolve(results); 
     return deferred.promise(); 
    }, 

    findByManager = function (managerId) { 
     var deferred = $.Deferred(), 
      employees = JSON.parse(window.localStorage.getItem("employees")), 
      results = employees.filter(function (element) { 
       return managerId === element.managerId; 
      }); 
     deferred.resolve(results); 
     return deferred.promise(); 
    }; 


// Store sample data in Local Storage 
window.localStorage.setItem("employees", JSON.stringify(
    [ 
     {"id": 1, "firstName": "James", "lastName": "King", "managerId": 0, "managerName": "", "reports": 4, "title": "President and CEO", "department": "Corporate", "cellPhone": "617-000-0001", "officePhone": "781-000-0001", "email": "[email protected]", "city": "Boston, MA", "pic": "james_king.jpg", "twitterId": "@fakejking", "blog": "http://coenraets.org"}, 
     {"id": 2, "firstName": "Julie", "lastName": "Taylor", "managerId": 1, "managerName": "James King", "reports": 2, "title": "VP of Marketing", "department": "Marketing", "cellPhone": "617-000-0002", "officePhone": "781-000-0002", "email": "[email protected]", "city": "Boston, MA", "pic": "julie_taylor.jpg", "twitterId": "@fakejtaylor", "blog": "http://coenraets.org"}, 
     {"id": 3, "firstName": "Eugene", "lastName": "Lee", "managerId": 1, "managerName": "James King", "reports": 0, "title": "CFO", "department": "Accounting", "cellPhone": "617-000-0003", "officePhone": "781-000-0003", "email": "[email protected]", "city": "Boston, MA", "pic": "eugene_lee.jpg", "twitterId": "@fakeelee", "blog": "http://coenraets.org"}, 
     {"id": 4, "firstName": "John", "lastName": "Williams", "managerId": 1, "managerName": "James King", "reports": 3, "title": "VP of Engineering", "department": "Engineering", "cellPhone": "617-000-0004", "officePhone": "781-000-0004", "email": "[email protected]", "city": "Boston, MA", "pic": "john_williams.jpg", "twitterId": "@fakejwilliams", "blog": "http://coenraets.org"}, 
     {"id": 5, "firstName": "Ray", "lastName": "Moore", "managerId": 1, "managerName": "James King", "reports": 2, "title": "VP of Sales", "department": "Sales", "cellPhone": "617-000-0005", "officePhone": "781-000-0005", "email": "[email protected]", "city": "Boston, MA", "pic": "ray_moore.jpg", "twitterId": "@fakermoore", "blog": "http://coenraets.org"}, 
     {"id": 6, "firstName": "Paul", "lastName": "Jones", "managerId": 4, "managerName": "John Williams", "reports": 0, "title": "QA Manager", "department": "Engineering", "cellPhone": "617-000-0006", "officePhone": "781-000-0006", "email": "[email protected]", "city": "Boston, MA", "pic": "paul_jones.jpg", "twitterId": "@fakepjones", "blog": "http://coenraets.org"}, 
     {"id": 7, "firstName": "Paula", "lastName": "Gates", "managerId": 4, "managerName": "John Williams", "reports": 0, "title": "Software Architect", "department": "Engineering", "cellPhone": "617-000-0007", "officePhone": "781-000-0007", "email": "[email protected]", "city": "Boston, MA", "pic": "paula_gates.jpg", "twitterId": "@fakepgates", "blog": "http://coenraets.org"}, 
     {"id": 8, "firstName": "Lisa", "lastName": "Wong", "managerId": 2, "managerName": "Julie Taylor", "reports": 0, "title": "Marketing Manager", "department": "Marketing", "cellPhone": "617-000-0008", "officePhone": "781-000-0008", "email": "[email protected]", "city": "Boston, MA", "pic": "lisa_wong.jpg", "twitterId": "@fakelwong", "blog": "http://coenraets.org"}, 
     {"id": 9, "firstName": "Gary", "lastName": "Donovan", "managerId": 2, "managerName": "Julie Taylor", "reports": 0, "title": "Marketing Manager", "department": "Marketing", "cellPhone": "617-000-0009", "officePhone": "781-000-0009", "email": "[email protected]", "city": "Boston, MA", "pic": "gary_donovan.jpg", "twitterId": "@fakegdonovan", "blog": "http://coenraets.org"}, 
     {"id": 10, "firstName": "Kathleen", "lastName": "Byrne", "managerId": 5, "managerName": "Ray Moore", "reports": 0, "title": "Sales Representative", "department": "Sales", "cellPhone": "617-000-0010", "officePhone": "781-000-0010", "email": "[email protected]", "city": "Boston, MA", "pic": "kathleen_byrne.jpg", "twitterId": "@fakekbyrne", "blog": "http://coenraets.org"}, 
     {"id": 11, "firstName": "Amy", "lastName": "Jones", "managerId": 5, "managerName": "Ray Moore", "reports": 0, "title": "Sales Representative", "department": "Sales", "cellPhone": "617-000-0011", "officePhone": "781-000-0011", "email": "[email protected]", "city": "Boston, MA", "pic": "amy_jones.jpg", "twitterId": "@fakeajones", "blog": "http://coenraets.org"}, 
     {"id": 12, "firstName": "Steven", "lastName": "Wells", "managerId": 4, "managerName": "John Williams", "reports": 0, "title": "Software Architect", "department": "Engineering", "cellPhone": "617-000-0012", "officePhone": "781-000-0012", "email": "[email protected]", "city": "Boston, MA", "pic": "steven_wells.jpg", "twitterId": "@fakeswells", "blog": "http://coenraets.org"} 
    ] 
)); 

    // The public API 
return { 
    findById: findById, 
    findByName: findByName, 
    findByManager: findByManager 
}; 

}());

EmployeeModel.js

app.models.Employee = Backbone.Model.extend({ 

}); 

app.models.EmployeeCollection = Backbone.Collection.extend({ 
    model: app.models.Employee, 
url: 'http://www.bonar.si/api/restaurants', 

initialize: function(){ 
    console.log("Employees initialize"); 
}, 

parse : function(response) { 
    console.log("response", response); 
    localStorage.setItem('json', JSON.stringify(response)); 
    console.log("local storage:", localStorage.getItem('json')); 
    return response; 

} });

Итак, у меня есть данные JSON в моем локальном хранилище, а затем я работаю с этими данными. Но теперь я хочу сохранять данные JSON из URL-адреса в локальное хранилище один раз в день и сохранять его в локальном хранилище.

Итак, идея состоит в том, чтобы получать свежие данные один раз в день и сохранять их в локальном хранилище, а затем манипулировать этими данными из локального хранилища, поэтому мне не нужно запрашивать JSON из URL-адреса для всего, что я делаю.

in EmployeeModel.js Я получаю данные с url для сбора и сохраняю их в localstorage, но теперь я потерян. Я легко теряюсь с позвоночником.

спасибо за помощь.

+0

И в чем проблема? –

+0

теперь у меня есть json уже в локальном хранилище, вы можете увидеть его в localstorage-adapter.js. Но я хочу получить его из url. Я начал что-то в EmployeeModel.js, теперь, когда я запускаю приложение, я получаю данные с url. Но проблема в том, что я хочу получить данные с URL-адреса только один раз в день и сохранить его локальное хранилище. И когда я использую данные в приложении, я хочу загрузить его из локального хранилища. – Chufta

+0

Оформить заказ https://github.com/jeromegn/Backbone.localStorage –

ответ

0

Итак, если я правильно понял, вам нужно обновить данные сотрудника один раз в день? Одно из моих приложений делает это. Мой подход состоял в том, чтобы сохранить переменную localStorage с отметкой времени обновления. Функция обновления вызывается каждый раз, когда вы открываете приложение (из функции onDeviceReady). Если временная метка обновления в localStorage старше дня или равна нулю, она переходит к извлечению данных из URL-адреса и устанавливает дату обновления.

Смежные вопросы