zoukankan      html  css  js  c++  java
  • Windows store app Settings 的 应用 ( viewmodel + windows.storage)

    1.在首页 加入 一个元素(加下滑线的)。此元素绑定了两个属性

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>App1</title>
    
        <!-- WinJS references -->
        <link href="//Microsoft.WinJS.1.0/css/ui-dark.css" rel="stylesheet" />
        <script src="//Microsoft.WinJS.1.0/js/base.js"></script>
        <script src="//Microsoft.WinJS.1.0/js/ui.js"></script>
    
        <!-- App1 references -->
        <link href="/css/default.css" rel="stylesheet" />
        <script src="/js/default.js"></script>
        <script src="/js/util.js" type="text/javascript">
        
        </script>
    </head>
    <body>
        <div id="aa" data-win-bind="style.color:color;innerText:text" style="height: 40px;  100px"></div>
    </body>
    </html>

    2.定义viewmodel, 并监听 viewmodel的属性变化。这样就可以在属性变化的时候,在更新UI的同时,去做想做的事。比如:更改本地存储。首页js 如下:

    (function () {
        "use strict";
    
        WinJS.Binding.optimizeBindingReferences = true;
    
        var app = WinJS.Application;
        var activation = Windows.ApplicationModel.Activation;
       WinJS.Application.onsettings = function (e) {
    
            //添加设置的选项
            e.detail.applicationcommands = {// href: 是设置相关信息使用的页面 | title: 就是 设置显示的文字 | color : 对应 settings.html 内 拥有 data-win-control="WinJS.UI.SettingsFlyout" 属性的元素的id
                "color": { href: "pages/settings.html", title: "更改字体颜色&内容" }
            };
    
            //把 自定义的设置选项 添加到 设置窗口
            WinJS.UI.SettingsFlyout.populateSettings(e);
        };
    
    
        app.onactivated = function (args) {
            if (args.detail.kind == activation.ActivationKind.launch) {
    
                //定义一个 ViewModel 
                WinJS.Namespace.define("ViewModel", {
                    Settings: WinJS.Binding.as({
                        color: "red",
                        text: 'aaaasdasdasdsa'
                    })
                });
    
                //需要观察的属性
                var settings = ['color', 'text'];
    
                //给 viewmodel 绑定 属性改变事件
                AddisonUitl.BindViewModelEvent(ViewModel.Settings, settings);
    
                WinJS.UI.processAll().then(function () {
    
                    //绑定数据
                    WinJS.Binding.processAll(document.getElementById('aa'), ViewModel.Settings);
                })
            }
        }
    
        app.start();
    })();

    3.因为在 添加自定义设置 选项的时候,需要一个设置页面,下面是 settings.html

    <!DOCTYPE HTML>
    <html>
    <head>
        <title></title>
        <style>
            #colorsDiv #backbutton {
                color: #ffd800;
                border-color: #ffd800;
            }
    
            #colorsDiv div.win-header {
                color: white;
                font-weight: bolder;
                background-color: #0094ff;
            }
        </style>
        <script>
            WinJS.UI.Pages.define("pages/settings.html", {
                ready: function () {
    
                    document.getElementById("backbutton").addEventListener("click", function () {
                        WinJS.UI.SettingsFlyout.show();
                        var bgColor = document.getElementById('bg').value,
                            text = document.getElementById('text2').value;
    
                        //更改viewmodel的属性值,触发 viewmodel bind的事件,从而去更改 本地存储的值。
                        ViewModel.Settings.color = bgColor;
                        ViewModel.Settings.text = text;
                    });
    
                }
            });
        </script>
    </head>
    <body>
        <div id="color" data-win-control="WinJS.UI.SettingsFlyout">
            <div class="win-header">
                <button id="backbutton" class="win-backbutton"></button>
                <div class="win-label">Colors</div>
            </div>
            <div class="win-content">
    
                <h1>背景颜色</h1>
                <input id="bg" />
    
                <h1>更改内容</h1>
                <input id="text2">
            </div>
        </div>
    </body>
    </html>

    4.下面是 util.js 的代码:

    WinJS.Namespace.define('AddisonUitl', {
    
        /// <summary> </summary>
        /// <param name="name" type=""> property of ViewModel </param>
        /// <param name="eventType" type="">  the key in  param name </param>
        BindViewModelEvent: function (name, eventType) {
            var that = this;
            eventType.forEach(function (item, index) {
    
                //载入 用户设置 信息
                var valArray = Windows.Storage.ApplicationData.current.localSettings.values;
                if (valArray[item] != undefined) {
                    name[item] = valArray[item];
                }
    
                //绑定属性改变事件
                name.bind(item, function (newVal, oldVal) {
    
                    if (oldVal != null) {
                        that.storeSetting(item, newVal);
                        // that.updateViewModel(name, item, newVal);
                    }
                })
            })
        },
    
        storeSetting: function (key, value) {
            var store = Windows.Storage;
            store.ApplicationData.current.localSettings.values[key] = value;
        },
    
        updateViewModel: function (name, key, value) {
            name[key] = value;
        }
    })
  • 相关阅读:
    Flutter 开发环境搭建
    swift 如何控制view的显示与隐藏
    TextView textSize 文字大小
    Android项目增加混淆
    Android EditText 无法换行
    Android 6.0 新特性 整理 资料来自网络
    java线程中的sleep/wait/notify/yield/interrupt方法 整理
    java 抽象类与接口的区别 整理
    android 系统架构
    android handler工作原理
  • 原文地址:https://www.cnblogs.com/Mr-Joe/p/3195939.html
Copyright © 2011-2022 走看看