Связывание с данными jquery mobile множественный выбор с нокаутом - PullRequest
1 голос
/ 09 января 2012

ОБНОВЛЕНИЕ Я понял, почему он не будет загружать данные в выборку ... мои

 function company(name, value) {
        this.name = ko.observable(name);
        this.value = ko.observable(value);
    }

должны были быть

function company(name, value) {
   this.comapnyName = name;
   this.companyValue = value;
}

такон будет соответствовать ожидаемой структуре в привязке данных ... однако он все еще не загружается в начале, но только после того, как я выберу что-либо, он изменится с предыдущих трех на три, загруженные вызовом JSON ... anyОбновление причины не запускается?

ОБНОВЛЕНИЕ

Я пытаюсь динамически загрузить некоторые элементы в множественный выбор в стиле мобильного jquery, но с использованием knockout.js в качестве бэкэнда ... вот мой код ... он работает, когда я загружаю viewModel в коде (показывая элементы test, test1, test2), но я бы хотел загрузить элементы не на стороне сервера, ана стороне клиента, используя нижеприведенный вызов $ .getJSON:

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
<script type="text/javascript" src="js/knockout-2.0.0.debug.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta charset="utf-8" http-equiv="X-UA-Compatible" content="IE=9" />
<meta http-equiv="CACHE-CONTROL" content="NO-CACHE" />
</head>
<body>
Choose a company: <select id="companies" data-role="select" data-bind="options: companies,
    optionsCaption: 'Choose...',
    optionsText: 'companyName',
    optionsValue: 'companyValue',
    selectedOptions: chosencompanies" data-native-menu="false" multiple></select> 
<input data-bind="value: chosencompanies"></input>    
<script type="text/javascript">
$(document).ready(function () {
    function company(name, value) {
        this.name = ko.observable(name);
        this.value = ko.observable(value);
    }
    var viewModel = {
        companies: ko.observableArray([
                { companyName: "test", companyValue: 0 },
                { companyName: "test1", companyValue: 1 },
                { companyName: "test2", companyValue: 2 }
            ]),
        chosencompanies: ko.observableArray(["0", "1", "2"]),
        resetcompanies: function () { this.chosencompanies(null) }
    };
    $.getJSON("http://localhost/service.svc/json/gc", function (json) {
        //var dataFromServer = ko.utils.parseJson(json);
        var mappedData = ko.utils.arrayMap(json.GetCompaniesRESTResult, function (item){
            return new company(item.LongName, item.ID);
        });
        viewModel.companies(mappedData);
    });
    ko.applyBindings(viewModel);
    $("#companies").selectmenu('refresh', 'true');
});
</script>
</body>
</html>

Однако, несмотря на то, что переменная mappedData правильно загружена из моего вызова getJSON (который BTW возвращает следующий JSON:

{"GetCompaniesRESTResult":
[{"ID":1,"IsOnline":false,"LongName":"test1","ShortName":"t1"},
{"ID":2,"IsOnline":false,"LongName":"test2","ShortName":"t2"},
{"ID":3,"IsOnline":false,"LongName":"test3","ShortName":"t3"}]}

Не отображается на загруженном компьютере.age .. как только я нажму кнопку выбора и попытаюсь выбрать что-то, я увижу, что ввод выбранных компаний будет содержать 3 запятых символа (но ничего между ними, поскольку он ранее содержал ["0", "1", "2"], , которая была моей попыткой предварительно выбрать все элементы, загруженные в select - что я также до сих пор не смог сделать - так что если кто-то знает, пожалуйста, ответьте также здесь или на Как сделать предварительный выборопция в выпадающем списке нокаутом js ).

Я присваиваю значения компаниям observableArray неправильно?Или это значение, назначенное каким-то образом неправильно сформированным (даже если ему передан массив), и оно отображается как таковое в инструментах разработчика Safari, таких как Array [3].Или, может быть, этот вызов обновления не очень хорош?

Пожалуйста, помогите, любая помощь будет признательна, я в основном начинаю нокаут и JQM сейчас ...

...