javascript
  • knockout.js
  • 2015-04-10 3 views 0 likes 
    0

    На моем взгляде, у меня есть входной файл:Knockoutjs не обновляет ViewModel

    <input type="file" class="file-input" name="file_source" size="40" onchange=''> 
    

    И пядь, в котором я показываю загруженный файл:

    <span class='label label-info' id="upload-file-info" data-bind="text: image"></span> 
    
    $(".file-input").change(function() { 
          var elem = $("#upload-file-info"); 
          elem.html = $(this).val(); 
         }); 
    

    Этот пролет переплетен с knockoutjs:

    viewModel = { 
    image: ko.observable() 
    } 
    
    ko.applyBindings(viewModel); 
    

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

    +0

    Как обновляется изображение? В каком смысле? –

    +0

    Вы переписываете свойство 'jQuery.fn.html' элемента, поэтому ничего не должно делать - он мог бы работать с помощью' elem.html ($ (this) .val()) ', хотя я не уверен, KO поддерживает двустороннюю привязку для элементов . Я думаю, что вы получили идею назад, общий способ сделать это состоит в том, что ваш 'viewModel' контролирует ваше представление. Поэтому вы обычно хотите установить модель и позволить обновлять представление для вас. – mfeineis

    +0

    При изменении «file-input» я добавляю имя файла в диапазон – stackUnderflow

    ответ

    1

    Я сделал quick fiddle согласно моему комментарию на ваш вопрос. Это должно работать:

    jQuery(document).ready(function ($) { 
        'use strict'; 
    
        $(".file-input").change(function() { 
         var elem = $("#upload-file-info"); 
         viewModel.image($(this).val()); 
        }); 
    
        var viewModel = { 
         image: ko.observable() 
        }; 
        viewModel.image.subscribe(function (value) { 
         alert(value); 
        }); 
    
        ko.applyBindings(viewModel); 
    }); 
    
    +0

    Да, это сработало! – stackUnderflow

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