Установить атрибут для объектов с помощью строки атрибута JavaScriptJquery

Программирование на jquery
Ответить
Anonymous
 Установить атрибут для объектов с помощью строки атрибута JavaScript

Сообщение Anonymous »

У меня есть книга «Нокаут для студентов», и я смотрю на AJAX:

Код: Выделить всё

    self.loadUserData = function(){
$.getJSON("http://127.0.0.1:5000/data", function(data){
self.firstName(data.firstName);
self.lastName(data.lastName);
self.activities(data.activities);
self.favoriteHobby(data.favoriteHobby);
});
}
}
Полный код выглядит так:
ajax-chapter-7.html:

Код: Выделить всё


External data




External data



First name: 

Last name: 

Your favorite hobby:


Load Data






function PersonViewModel(){
var self = this;
self.firstName = ko.observable("");
self.lastName = ko.observable("Johnson");
self.activities = ko.observableArray([]);
self.favoriteHobby = ko.observable("");

// http://stackoverflow.com/questions/25011952/can-you-add-headers-to-getjson-in-jquery

$.ajaxSetup({
headers: {
// 'Origin': 'http://example.com'
}
})

self.loadUserData = function(){
$.getJSON("http://127.0.0.1:5000/data", function(data){
Object.keys(data).forEach(function(k){
alert(k);
alert(data[k]);
alert(self[k]);
self[k] = data[k];
});
// self.firstName(data.firstName);
// self.lastName(data.lastName);
// self.activities(data.activities);
// self.favoriteHobby(data.favoriteHobby);
});
}
}

ko.applyBindings(new PersonViewModel());



server.py:

Код: Выделить всё

from flask import Flask, jsonify
from flask_cors import CORS, cross_origin

app = Flask(__name__)
CORS(app)

@app.route('/')
def hello():
return 'Hello, world'

# http://stackoverflow.com/questions/13081532/how-to-return-json-using-flask-web-framework
@app.route('/data')
def data():
data = {
'firstName': 'Cody',
'lastName': 'Childers',
'activities': [
'Golf',
'Kayaking',
'Web development',
],
'favoriteHobby': 'Golf',
}

return jsonify(**data)

if __name__ == "__main__":
app.run()
Книга и код работают, но loadUserData ужасен и повторяется. В Python мы можем сделать это следующим образом:

Код: Выделить всё

keys = ['firstName', 'lastName', 'activities', 'favoriteHobby']
for key in keys:
setattr(self, key, getattr(data, key))
Это просто.
Существует ли JavaScript-эквивалент для установки атрибутов для себя по строке, предполагая, что я знаю, что получаемые мной ключи JSON совпадают с именами атрибутов, которые я хочу установить?
Knockout потребует от меня вызывать атрибуты как функцию, а не устанавливать их как обычные атрибуты (knockout называет это «наблюдаемыми»).

Подробнее здесь: https://stackoverflow.com/questions/404 ... javascript
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Jquery»