Po prostu zaglądam do knockout.js z MVC-Web-API i próbuję stworzyć stronę Hello World, która aktualizuje czas na stronie co 5 sekund . Wykonuje połączenie co 5 sekund, widzę to w moim kontrolerze (punkcie przerwania), ale wciąż nic nie wyświetla się na ekranie.Knockout.js - Strona aktualizacji co 5 sekund z nową wartością
AKTUALIZACJA: Nadal pracuję nad tym i teraz ustaliłem, że otrzymuję dane z powrotem z serwera, wywołanie jest wysyłane do kontrolera co 5 sekund, a to zwraca JSON I potrzeby (wyświetlają się ostrzeżenia), ale na elemencie przęsła na stronie wciąż nie wyświetla się nic.
Muszę realistycznie użyć funkcji mapowania, ponieważ tworzę większą witrynę internetową, która ma model z ponad 50 właściwościami i nie chce specjalnie przeglądać ich pojedynczo w viewmodelu.
Podałem mój kod poniżej.
<span data-bind="text: TimeString"></span>
<script type="text/javascript">
var viewModel;
var getUpdates = setInterval(function() {
$.getJSON(
"/Values/Get", {},
function (model) {
alert(model.TimeString);
ko.mapping.fromJS(model, viewModel);
});
}, 5000);
$(document).ready(
function() {
$.getJSON(
"/Values/Get", {},
function (model) {
var viewModel = ko.mapping.fromJS(model);
alert(model.TimeString);
ko.applyBindings(viewModel);
});
});
function bindViewModel(model) {
ko.applyBindings(model);
}
public class HelloWorldModel
{
public DateTime TimeDT { get; set; }
public String TimeString { get; set; }
}
public class ValuesController : Controller
{
public HelloWorldModel Model = new HelloWorldModel();
[System.Web.Mvc.AcceptVerbs(HttpVerbs.Get)]
public JsonResult Get()
{
Model.TimeDT = DateTime.Now;
Model.TimeString = Model.TimeDT.ToString("HH:mm:ss");
return Json(Model, JsonRequestBehavior.AllowGet);
}
// POST api/values
public void Post([FromBody]string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
}
}
Co to jest "dane" w powiązaniu? Czy to jest niestandardowe powiązanie? Lub masz na myśli ''? – nemesv
Skąd się bierze aktualizacjaFromJSON? W dokumentacji jest napisane: ko.mapping.fromJS (data, viewModel); – Peter
Powinieneś używać wtyczki do mapowania w swoim oryginalnym wywołaniu AJAX, a nie tylko tym, który powtarza się co 5 sekund. –