2013-03-11 4 views
1

Я хочу, чтобы текст в загрузочной javascript-кнопке обновлялся, чтобы показать номер, который хранится в нокауте, наблюдаемом в моей модели просмотра.Кнопка Javascript Bootstrap не показывает нокаут наблюдаемый

Я могу обновить текст на кнопке, чтобы быть чем угодно, кроме наблюдаемого, когда я изменяю его, чтобы содержать наблюдаемый, текст кнопки неправильный и отображает наблюдаемую как функцию.

Это легче объяснить с скрипку так вот упрощенный пример: http://jsfiddle.net/rswailes/JxHwy/

HTML

<button 
    id="download-file" 
    data-loading-text="Updating totals..." 
    data-bind="attr: {'data-complete-text' : 'Download lines: '+total , 
         'data-finished-text' : 'done' }" 
    autocomplete="off" 
    class="btn btn-small download-file" 
    type="button">Download file</button> 

<p> 
Total: <span data-bind="text: total"></span> 
</p> 

JAVASCRIPT

var ViewModel = function(){ 
    var self = this; 
    this.total = ko.observable(); 

    this.loadModel = function(){ 
     $('#download-file').button("loading"); 
     this.total(10); 
     $('#download-file').button("complete"); // this is the line I would like to work but does not work 
     //$('#download-file').button("finished"); // if you uncomment this line you will see this line works fine 
    }; 
}; 


viewModel = new ViewModel(); 
ko.applyBindings(viewModel); 
viewModel.loadModel(); 

Может кто-нибудь сказать мне, почему это происходит, и если то, что Я хотел бы сделать это возможно?

EDIT: Я пробовал total(), как предложено ниже, затем я получаю «Download lines: undefined» на кнопке.

ответ

0

Чтобы получить значение наблюдаемого, вам необходимо называть его функцией типа total().

Встроенные привязки позаботятся об этом для вас, если вы просто передадите простое свойство/наблюдаемое, например total. Однако, если вы используете его в выражении, тогда вам нужно будет называть его как функцию самостоятельно, например "Download lines: " + total()

+0

Я попробовать это, то я получаю «неопределенные» вместо текста функции. Я уточню свой вопрос. – Rachel

+2

Кнопка Bootstrap кэширует исходное значение данных и поэтому не использует ваше новое значение. Например, если исходное значение было 5: http://jsfiddle.net/rniemeyer/pcTsu/ –

+0

Я принимаю это, потому что total() верен, но вы также объясняете, почему сохраняется исходное значение данных. – Rachel

0

Чтобы получить доступ к значению наблюдаемой переменной, вы должны использовать total(). И вам нужно обновить свой код и использовать привязку привязки для загрузки данных модели. Вот рабочая скрипку:

http://jsfiddle.net/JxHwy/3/

+0

Я попытался использовать общее количество до и получил «undefined» на кнопке. Спасибо, что вы вставляете рабочую скрипку. Можете ли вы объяснить, почему, если я переместил кнопку $ ('# download-file'). («Загрузка») в строку до этого. (10), то я снова получу «неопределенный»? (Это ближе к коду, который у меня есть в моем реальном приложении). – Rachel

+0

Думаю, что я знаю - вы должны использовать '.text (" complete ")' и '.text (" loading ")', если вы пытаетесь изменить текст кнопки, а не '.button()', чтобы сделать что. – vapcguy

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