Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

WinJSのRatingコントロールと双方向バインディング

$
0
0

RatingとspanをViewModelを介してバインドしてみたいと思います。

ViewModelは、JavaScriptでバインド可能なようにしておきます。

var viewModel = WinJS.Binding.as({
    averageRating: 5
});

次に、WinJS.UI.processAllの後にデータバインドをします。

WinJS.UI.processAll()
    .then(function() {
        WinJS.Binding.processAll(null, viewModel);

        var rating = document.querySelector("#rating").winControl;
        rating.onchange = function (e) {
            viewModel.averageRating = e.detail.tentativeRating;
        };
    });

Ratingコントロールには、ratingというidをふっています。あとはRatingコントロールとspanタグにバインドしておきます。

<divid="rating"data-win-control="WinJS.UI.Rating"data-win-options="{        maxRating: 10     }"data-win-bind="winControl.averageRating: averageRating"></div><spandata-win-bind="textContent: averageRating"></span>

実行するとこんな感じで★がつきます。

f:id:okazuki:20150101225642p:plain

★をチェックすると、数字も連動します。

f:id:okazuki:20150101225750p:plain

ソース全体

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/><linkhref="WinJS/css/ui-light.css"rel="stylesheet" /><scriptsrc="WinJS/js/base.js"></script><scriptsrc="WinJS/js/ui.js"></script><scriptsrc="WinJS/js/WinJS.js"></script><title>こんにちは世界</title></head><body><divid="rating"data-win-control="WinJS.UI.Rating"data-win-options="{            maxRating: 10         }"data-win-bind="winControl.averageRating: averageRating"></div><spandata-win-bind="textContent: averageRating"></span><scripttype="text/javascript">        WinJS.Application.onready = function(){var viewModel = WinJS.Binding.as({                averageRating: 5
});            WinJS.UI.processAll()
                .then(function(){                    WinJS.Binding.processAll(null, viewModel);var rating = document.querySelector("#rating").winControl;                    rating.onchange = function(e){                        viewModel.averageRating = e.detail.tentativeRating;};});};        WinJS.Application.start();</script></body></html>

Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>