- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我终于找到了一种方法,可以让 jQuery UI 按钮集“工作”并带有 knockout。事实上,我宁愿模仿它。添加所有默认类是一回事,但我不得不认为应该有一种更简单的方法来解决悬停和聚焦问题。
我试过 knockout-jqueryUI binding无济于事。不知何故所有的类(class)都被撤消了。
HTML:
<div data-bind="with: selected, jqButtonset: {}">
<input class="ui-helper-hidden-accessible" type="checkbox" data-bind="attr: { 'id' : 'myBold'+ ID}, checked: isBold" >
<label rule="button" aria-disabled="false"
class="ui-button ui-widget ui-state-default ui-button-text-only ui-corner-left ui-state-active"
data-bind="attr: { 'for' : 'myBold'+ ID},
hasFocus: $root.bIsSelected,
event: { mouseover: $root.bMouseOver, mouseout: $root.bMouseOut },
css: { 'ui-state-active' : isBold, 'ui-state-focus' : $root.bIsSelected(), 'ui-state-hover' : $root.bHovering() }">
<span class="ui-button-text">B</span>
</label>
<input class="ui-helper-hidden-accessible" type="checkbox" data-bind="attr: { 'id' : 'myItalic'+ID}, checked: isItalic">
<label rule="button" aria-disabled="false"
class="ui-button ui-widget ui-state-default ui-button-text-only ui-corner-none ui-state-active"
data-bind="attr: { 'for' : 'myItalic'+ ID},
hasFocus: $root.iIsSelected,
event: { mouseover: $root.iMouseOver, mouseout: $root.iMouseOut },
css: { 'ui-state-active' : isItalic, 'ui-state-focus' : $root.iIsSelected(), 'ui-state-hover' : $root.iHovering() }">
<span class="ui-button-text">I</span>
</label>
<input class="ui-helper-hidden-accessible" type="checkbox" data-bind="attr: { 'id' : 'myUnderlined'+ID}, checked: isUnderlined">
<label rule="button" aria-disabled="false"
class="ui-button ui-widget ui-state-default ui-button-text-only ui-corner-right ui-state-active"
data-bind="attr: { 'for' : 'myUnderlined'+ ID},
hasFocus: $root.uIsSelected,
event: { mouseover: $root.uMouseOver, mouseout: $root.uMouseOut },
css: { 'ui-state-active' : isUnderlined, 'ui-state-focus' : $root.uIsSelected(), 'ui-state-hover' : $root.uHovering() }">
<span class="ui-button-text">U</span>
</label>
</div>
JavaScript:
ko.bindingHandlers.jqButtonset = {
init: function (element) {
$(element).buttonset(); // Turns the element into a jQuery UI button
},
update: function (element, valueAccessor) {
var currentValue = valueAccessor();
// Here we just update the "disabled" state, but you could update other properties too
$(element).buttonset("option", "disabled", currentValue.enable === false);
}
};
Title = function(data){
var self = this;
self.ID = data.ID;
self.name = ko.observable(data.name);
self.isBold = ko.observable(data.isBold || false);
self.isItalic = ko.observable(data.isItalic || false);
self.isUnderlined = ko.observable(data.isUnderlined || false);
return self;
};
viewModel = function(){
var self = this;
// data
self.items = ko.observableArray([
new Title( {ID: 1, name: 'The first one', isBold: true, isItalic: false }),
new Title( {ID: 2, name: 'The second one', isBold: false, isItalic: true, isUnderlined: true })
]);
self.selected = ko.observable();
// handling hover & focus
self.bHovering = ko.observable(false);
self.iHovering = ko.observable(false);
self.uHovering = ko.observable(false);
self.bIsSelected = ko.observable(false);
self.iIsSelected = ko.observable(false);
self.uIsSelected = ko.observable(false);
self.bMouseOver = function(){ self.bHovering(true);};
self.bMouseOut = function(){ self.bHovering(false); };
self.iMouseOver = function(){ self.iHovering(true);};
self.iMouseOut = function(){ self.iHovering(false); };
self.uMouseOver = function(){ self.uHovering(true);};
self.uMouseOut = function(){ self.uHovering(false); };
};
ko.applyBindings( new viewModel() );
在这里 fiddle :http://jsfiddle.net/AsleG/3vn5wuwr/2/
我的问题:有没有比我的按钮单独方法更简单的方法来设置“ui-state-hover”和“ui-state-focus”的 css 类?
最佳答案
我认为简化这个的最好方法是将格式化按钮移到模型中:
http://jsfiddle.net/3vn5wuwr/7/
所以按钮得到一个模型
FormatButton = function(data)
{
var self = this;
self.letter = ko.observable(data.Letter);
//Styles for button group
self.isFirst = ko.observable(data.isFirst);
self.isLast = ko.observable(data.isLast);
self.isHovering = ko.observable(false);
self.isSelected = ko.observable(false);
self.mouseOver = function(){ self.isHovering(true);};
self.mouseOut = function(){ self.isSelected(false); };
}
每个标题都会有一些按钮
Title = function(data){
var self = this;
self.ID = data.ID;
self.name = ko.observable(data.name);
self.buttons = ko.observableArray([
new FormatButton( {isFirst: true, letter: 'B' }),
new FormatButton( {letter: 'I'}),
new FormatButton( {isLast: true, letter: 'U'})
]);
return self;
};
用于显示按钮的 html 可以变成一个 for 循环
<!-- ko foreach: buttons -->
<input class="ui-helper-hidden-accessible" type="checkbox" data-bind="attr: { 'id' : letter}, checked: isSelected" />
<label
rule="button" aria-disabled="false"
class="ui-button ui-widget ui-state-default ui-button-text-only ui-state-active"
data-bind="attr: { 'for' : 'myBold'+ ID},
hasFocus: $root.bIsSelected,
event: { mouseover: $root.bMouseOver, mouseout: $root.bMouseOut },
css: { 'ui-state-active' : isBold, 'ui-state-focus' : $root.bIsSelected(), 'ui-state-hover' : $root.bHovering(), 'ui-corner-left': isFirst, 'ui-corner-right': isRight }">
<span class="ui-button-text" data-bind="text: letter"></span>
</label>
<!-- /ko -->
关于javascript - 如何使用 knockoutJS 设置悬停和焦点的 css 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28541672/
我已经使用 knockout js 实现了一个简单的 spa,您可以在其中在多个页面之间导航,每个页面都呈现一个 View 模型。菜单是一个 2 级菜单,因此我有主页面和子页面。我用knockout的
我想使用组件作为表格行模板,但似乎找不到方法,这可能吗? 当我执行以下操作时,它不会将组件放在 tbody 中,而是将其放在表格上方。 组件 模板 最佳答案
我希望能够将单击和双击事件绑定(bind)到一段文本。我知道我可以使用 data-bind ="event: { dblclick: doSomething } 双击,但我还需要能够在单击时执行不同的
我是否可以告诉 knockout 映射插件订阅所有属性更改调用某个函数? 我意识到我可以通过这种方式手动订阅属性更改事件: var viewModel = { name: ko.observa
我想要一个可见或不可见,具体取决于我的 javascript 中的 bool 值。 我的 HTML 是: Remove
我想将此 json 映射到自定义对象。问题是项目不是 typeof Item 对象而是普通对象。我在这里缺少什么? 你可以在这里测试:http://jsfiddle.net/5jhpE/ var js
我有一个 self 描述的定义如下: var my_data = { types: { typeA: {fieldX: { type: "string"}}, typeB:
首先看一下: http://pastebin.com/823NMiWc 这是 Knckoutjs + Jquery Raty 插件 假设这些是数据库中的列: story_rev: ko.observa
我正在使用 knockout.js 并尝试设置我的选择绑定(bind)的默认值(不使用 optionCaption),并在有人更改它时捕获该值。
我目前有一个数字框,用户可以在其中输入数字 1、2 或 3,并在此基础上设置一些条件格式。 但是,我希望数字字段成为一个下拉列表,其中显示“短”、“长”和“非常长”之类的内容,但在幕后,传递的实际值是
我正在寻找一些有关如何创建代表我的评论系统中的帖子的模型的指南。本质上,它是 Facebook 的简化版本,其中有不同用户的帖子,每个帖子都有零个或多个评论。亲子关系始终只有一层。 创建 Post 对
我需要为数组的每个元素计算一个可观察值。此计算可观察量的解析需要依赖于每个数组元素上下文中存在的其他属性。 请检查以下示例案例: 这是 KnockoutJS foreach 绑定(bind)到嵌套数组
我在网格中有一个嵌套的组产品选项数组。我想要一个弹出编辑器,列出每个分组产品选项的所有产品(产品选项行),并允许用户检查它们之间的关系。我遇到过多对多关系的示例,但没有看到 self 引用分组多对多的
我正在使用KnockoutJs构建一个搜索列表,代码如下: HTML: 部分Js搜索功能: this.name = ko.observable(''); this.query = ko
我是 KnockoutJS 新手。我有一个按以下方式工作的应用程序: 加载页面时,复杂的数据结构会传递到前端 该数据结构被分成更小的 block ,这些数据 block 被传递给组件 用户与组件交互以
我有一个 ASP.Net MVC 网站,在 View 中使用 KnockoutJS 和 KOGrid。它动态地呈现某一特定列中的超链接,如下所示: cellTemplate: '' 已决定,单击时,浏
我正在使用javascript和knockoutjs来使用viewmodel实现搜索过滤器。我无法让搜索过滤器工作。下面是我的js文件 //Object Constructor Class for L
我使用 KnockoutJS 来创建工作申请网站,并使用 JS 中的 getJSON 方法。 不幸的是,我得到了这个结构: 办公室 纽约 部门 金融 职位 示例 ... IT 物流 营销 华盛顿 部门
我在这里创建了一个问题示例: http://jsfiddle.net/JustinN/qWeLT/1/ 我的实际代码已连接到 ASP.NET Web 方法,因此示例代码已调整为指向公共(public)
在过去的几天里,我对 Knockoutjs 越来越感兴趣。它看起来非常有前途,因为它对 MVVM 模式和 WPF 进行了类似绑定(bind)的建模,但每当它为非 RIA Web 应用程序带来一些有用的
我是一名优秀的程序员,十分优秀!