我有两个ObservableCollections,说ObservableCollection<Cat>和ObservableCollections<Dog>.猫和狗都来自Pet类.我想显示所有宠物的清单.我该怎么做呢?我不想ObservableCollection<Pet>通过添加来自两个源列表的项来创建新的,因为随着更多的Cats和Dogs添加到源列表中,此列表将变得陈旧.我可以想到两种方法:
1)创建一个"装饰器" ObservableCollection,将两个源集合保持为成员,并每次迭代它们.
2)创建一个ObservableCollection<Pet>具有两个源集合的组合元素,但也依赖于源集合.因此,如果将Cat添加到Cat集合中,则会通知此集合,并将新Cat添加到自身.
有没有一种标准的方法可以解决这个问题?我不想重新发明轮子!
我通过覆盖其控件模板为我的WPF数据网格创建了一个自定义样式 - 没有什么不寻常的,只是复制了原始模板并对其进行了修改.不幸的是,当绘制网格时,我的ViewModel的完全限定类名显示在标题中(ViewModel恰好是包含DataGrid的UserControl的DataContext).使用Snoop,我缩小了模板中显示此类名的元素:
<DataGridColumnHeadersPresenter
Grid.Column="1"
Name="PART_ColumnHeadersPresenter"
Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=HeadersVisibility, Converter={x:Static DataGrid.HeadersVisibilityConverter}, ConverterParameter={x:Static DataGridHeadersVisibility.Column}}"/>
Run Code Online (Sandbox Code Playgroud)
此部分的可视树看起来像这样:
PART_ColumnHeadersPresenter (DataGridColumnHeadersPresenter)
(Grid)
headerBorder (DataGridHeaderBorder)
(Border)
(TextBlock)
Run Code Online (Sandbox Code Playgroud)
这个文本块包含类名!所以问题是
PS要回答下面的评论,我正在为ItemSource和每列指定正确的路径:
<DataGrid
ItemsSource="{Binding Path=Orders, Mode=TwoWay}"
AutoGenerateColumns="False"
IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn
Header="Creation Time"
Binding="{Binding Path=CreationTime}"
CellStyle="{StaticResource LeftAlignedCellStyle}"
SortMemberPath="CreationTime">
</DataGridTextColumn>
...
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
我没有看到任何必须将TextBlock绑定到列标题边框的位置.甚至不知道它是如何有意义的!
根据阿凡达的评论,我将分享我的整个模板.见下文:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Brushes.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!-- ColumnHeader Gripper Style -->
<Style x:Key="ColumnHeaderGripperStyle" TargetType="{x:Type Thumb}">
<Setter Property="Width" Value="8"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Cursor" Value="SizeWE"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type …Run Code Online (Sandbox Code Playgroud) 我正在创建一个以 JSON 消息形式接收请求的服务。我需要解析消息并根据请求类型采取适当的操作。例如(在伪代码中):
switch(request.type) {
case "NewOrder":
createNewOrder(order);
break;
case "CancelOrder"
cancelOrder(orderId);
break;
}
Run Code Online (Sandbox Code Playgroud)
似乎大多数 JSON API(至少那些为您做对象映射的 API)需要根对象类型来反序列化。有没有什么优雅的方法来解决这个问题?
例如,在 Jackson API(使用完整对象映射)中,我需要按如下方式调用映射器:
NewOrder newOrder = mapper.readValue(src, NewOrder.class);
CancelOrder cancelOrder = mapper.readValue(src. CancelOrder.class);
Run Code Online (Sandbox Code Playgroud)
这意味着我需要在解析对象之前就知道它的类。我真正需要的是某种方式来查看 JSON 字符串,确定请求类型,然后调用适当的 readValue() 方法 - 像这样:
String requestType = getRequestType(src);
switch(request.type) {
case "NewOrder":
NewOrder newOrder = mapper.readValue(src, NewOrder.class);
createNewOrder(newOrder.order);
break;
case "CancelOrder"
CancelOrder cancelOrder = mapper.readValue(src. CancelOrder.class);
cancelOrder(cancelOrder.orderId);
break;
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用 Jackson 或任何其他 Java JSON 解析器来做到这一点?我确信我可以进入较低级别并使用流式 API 或基于节点的 API,但如果可以,我会尽量避免这种复杂性。
我在端口8080上运行JBoss AS 7.我可以从本地机器(http://localhost:8080)访问它.但是,我无法从同一网络上的其他计算机访问它,例如http://192.168.1.104:8080无法正常工作.我已在本地计算机上禁用了Windows防火墙.实际上,如果我在端口8080上在本地计算机上启动Tomacat服务器,则可以从远程计算机轻松访问它.所以这是JBoss服务器导致问题的原因.有关如何解决此问题的任何想法?
谢谢.
在我的Angular应用程序中,我需要创建一个持久性服务接口,该接口根据浏览器中可用的持久性机制调用具体实现.我正在考虑使用通用storageService实现此功能,该服务调用了解存储机制的特定storageService.
例如,通用storageService将提供以下接口:
angular
.module('app.storage')
.factory('storageService', storageService);
function storageService() {
return {
saveItem: saveItem,
getItem: getItem
}
...
}
Run Code Online (Sandbox Code Playgroud)
storageService将有多个实现,例如localStorageService,indexedDbStorageService,webSqlStorageService.
基于浏览器功能动态注入具体存储服务的最佳方法是什么.例如,
if (isWebSqlAvailable()) {
// inject webSqlStorageService
}
else if (isIndexedDbAvailable() {
// inject indexedDbStorageService
}
else if (isLocalStorageAvailable() {
// inject localStorageService
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Spring MVC 实现 REST api。要求是:
/transactions返回交易数组。/transactions?groupByCategory返回按类别分组的交易。例如请求#1 返回:
[
{ "id": 1, "category": "auto", "amount": 100 },
{ "id": 2, "category": "misc", "amount": 200 },
{ "id": 3, "category": "auto", "amount": 300 }
]
Run Code Online (Sandbox Code Playgroud)
而请求 #2 按类别对此结果进行分组并返回每个类别的总和:
[
{ "category": "auto", "amount": 400 },
{ "category": "misc", "amount": 200 }
]
Run Code Online (Sandbox Code Playgroud)
显然这些请求的返回值是不同类型的。我如何在 Spring MVC 中做到这一点?到目前为止我有:
@RequestMapping("/transactions")
public List<Transaction> getTransactions(
@RequestParam(value="groupByCategory", required=false) String groupByCategory
) {
...
}
Run Code Online (Sandbox Code Playgroud)
但这将返回类型修复为List<Transaction>. 我如何适应第二种类型:List<TransactionSummaryByCategory>?
编辑:我找到了一种解决方案,即将返回类型指定为Object …
我正在尝试使用 Jest 运行测试,但是收到此错误:
jest.mock 不是一个函数
我究竟做错了什么?这是我的 CodeSandbox:https://codesandbox.io/s/polling-hook-demo-9yo8c
请注意,我在 package.json 中配置 Jest:
"setupFilesAfterEnv": [
"./src/test/setupTestsAfterEnv.ts"
]
Run Code Online (Sandbox Code Playgroud)
setupTestsAfterEnv.ts 使用 jest-dom 扩展 Jest Expect:
import "@testing-library/jest-dom/extend-expect";
Run Code Online (Sandbox Code Playgroud)
我也在使用反应测试库。
更新
这似乎是我的 CodeSandbox 配置的问题。我在本地尝试了与 create-react-app 相同的操作,问题就消失了!
这是我的 Github 存储库,其中 Jest 运行得非常好: https: //github.com/nareshbhatia/hooked-on-polling。
然后,我将此存储库导入到新的 CodeSandbox 中: https: //codesandbox.io/s/hooked-on-polling-2em7g。当我在此沙箱中运行测试时,我再次收到相同的错误:jest.mock 不是函数
我有一个测试用例,需要从注册页面 ( /signup) 开始,成功注册后,应用程序应导航到主页 ( /)。我目前正在使用 MemoryRouter 设置初始路由/signup,一切正常。见下文:
import React from 'react';
import userEvent from '@testing-library/user-event';
import { MemoryRouter } from 'react-router';
import { Route, Routes } from 'react-router-dom';
import { render, screen } from '../../test/test-utils';
import { SignUpPage } from './SignUpPage';
const MockHomePage = () => <div>MockHomePage</div>;
describe('<SignUp />', () => {
test('navigates to Home page on successful signup', async () => {
render(
<MemoryRouter initialEntries={['/signup']}>
<Routes>
<Route path="/" element={<MockHomePage />} />
<Route path="/signup" element={<SignUpPage …Run Code Online (Sandbox Code Playgroud) 我很难从Angular服务中公开属性.在下面的示例中,我将公开两个属性authService:isAuthenticated和user.但是当isAuthenticated改变时,它没有被拾取HomeController.有人能帮我理解我哪里错了吗?
(function() {
'use strict';
// Define the 'app' module
angular.module('app', []);
// Use the 'app' module
angular
.module('app')
.controller('LoginController', LoginController)
.controller('HomeController', HomeController)
.factory('authService', authService);
// ----- LoginController -----
LoginController.$inject = ['authService'];
function LoginController(authService) {
var vm = this;
vm.username = null;
vm.password = null;
vm.login = login;
function login() {
authService.login(vm.username, vm.password);
}
}
// ----- HomeController -----
HomeController.$inject = ['$scope', 'authService'];
function HomeController($scope, authService) {
var vm = …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的 http 服务:
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
import { environment } from '../../environments/environment';
import { JsOrder } from '../stores/models/order';
@Injectable({
providedIn: 'root'
})
export class OrderService {
private ordersUrl = `${environment.httpApiUrl}/orders`;
constructor(private http: HttpClient) {}
fetchOrders(): Observable<JsOrder[]> {
return this.http.get<JsOrder[]>(this.ordersUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图从@ngrx/effects 调用它(基于网络上的几个示例):
import { Injectable } from '@angular/core';
import { Actions, Effect, ofType } from '@ngrx/effects';
import { Action } from '@ngrx/store';
import …Run Code Online (Sandbox Code Playgroud) angularjs ×2
reactjs ×2
wpf ×2
angular6 ×1
codesandbox ×1
datagrid ×1
jackson ×1
java ×1
jboss7.x ×1
jestjs ×1
json ×1
merge ×1
ngrx ×1
ngrx-effects ×1
react-router ×1
rest ×1
spring-mvc ×1