AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / 问题

All perguntas(coding)

Martin Hope
RoR
Asked: 2025-04-09 03:20:14 +0800 CST

Atualização do Tomcat 8.5 para 9: comportamento de cache diferente

  • 6

Tenho uma aplicação web que exibe alguns objetos 3D. Os objetos 3D são arquivos estáticos em um subdiretório do TomCat. A aplicação é baseada em Java 8 e JavaScript. Se rodar no TomCat 8.5, tudo funciona bem em todos os navegadores. Usando o TomCat 9.0, ele não exibe os objetos. Descobri até agora que parece ser um problema de cache: quando desativo o cache nos modos de desenvolvedor do Edge ou do Chrome, tudo volta a carregar perfeitamente.

Minha pergunta é: como posso desativar o cache no TomCat 9?

Já tentei algumas ideias que encontrei no fórum, como:

  1. adicionando as meta tags Cache-Control, Pragma e Expires à seção head em html
  2. adicionando um arquivo TOMCATROUTE/conf/context.xml com < Context>< Resources antiResourceLocking="false" cachingAllowed="false"/>< /Context>
  3. use o arquivo context.xml abaixo em conf/Catalina/localhost (os arquivos que não devem ser armazenados em cache estão localizados em c:\xxx\service e são invocados por TOMCATINVOKE/service/... )

mas nenhuma delas funcionou. Alguma ideia?

Obrigado.

<Context>
  <Resources>
    <PreResources className="org.apache.catalina.webresources.DirResourceSet"
                  base="C:\xxx\service"
                  webAppMount="/service" />
  </Resources>
</Context>

PS: O mais estranho é que funciona bem no FireFox, mas não no Edge ou no Chrome (exceto quando mudo para o modo de desenvolvedor e desativo o cache).

javascript
  • 1 respostas
  • 36 Views
Martin Hope
Alice Yu
Asked: 2025-04-09 03:12:21 +0800 CST

Como digitar corretamente um decorador Python com ParamSpec e Concatenate que permite posicionamento arbitrário de argumentos?

  • 6

Tenho um decorador Python que garante que um método receba uma instância de AsyncConnection do psycopg. Estou tentando atualizar a tipagem para usar ParamSpece, Concatenatecomo a implementação atual não é segura para tipagem, estou travando.

Aqui está a implementação atual:

def ensure_conn(func: Callable[..., Coroutine[Any, Any, R]]) -> Callable[..., Coroutine[Any, Any, R]]:
    """Ensure the function has a conn argument. If conn is not provided, generate a new connection and pass it to the function."""

    async def wrapper(*args: Any, **kwargs: Any) -> R:
        # Get named keyword argument conn, or find an AsyncConnection in the args
        kwargs_conn = kwargs.get("conn")
        conn_arg: AsyncConnection[Any] | None = None
        if isinstance(kwargs_conn, AsyncConnection):
            conn_arg = kwargs_conn
        elif not conn_arg:
            for arg in args:
                if isinstance(arg, AsyncConnection):
                    conn_arg = arg
                    break
        if conn_arg:
            # If conn is provided, call the method as is
            return await func(*args, **kwargs)
        else:
            # If conn is not provided, generate a new connection and pass it to the method
            db_driver = DbDriver()
            async with db_driver.connection() as conn:
                return await func(*args, **kwargs, conn=conn)

    return wrapper

Uso atual:

@ensure_conn
async def get_user(user_id: UUID, conn: AsyncConnection):
    async with conn.cursor() as cursor:
    // do stuff

...mas posso chamar isso e não falhará na verificação de tipos:

get_user('519766c5-af86-47ea-9fa9-cee0c0de66b1', conn, arg_that_should_fail_typing)

Aqui está a implementação atual mais próxima que cheguei com ParamSpecand Concatenate:

def ensure_conn_decorator[**P, R](func: Callable[Concatenate[AsyncConnection[Any], P], R]) -> Coroutine[Any, Any, R]:
    """Ensure the function has a conn argument. If conn is not provided, generate a new connection and pass it to the function."""
    async def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
        # Get named keyword argument conn, or find an AsyncConnection in the args
        kwargs_conn = kwargs.get("conn")
        conn_arg: AsyncConnection[Any] | None = None
        if isinstance(kwargs_conn, AsyncConnection):
            conn_arg = kwargs_conn
        elif not conn_arg:
            for arg in args:
                if isinstance(arg, AsyncConnection):
                    conn_arg = arg
                    break
        if conn_arg:
            # If conn is provided, call the method as is
            return await func(*args, **kwargs)
        else:
            # If conn is not provided, generate a new connection and pass it to the method
            db_driver = DbDriver()
            async with db_driver.connection() as conn:
                return await func(*args, **kwargs, conn=conn)

    return wrapper

Os problemas são

  • Conn deve ser o primeiro argumento do método em vez de ter uma posição arbitrária - geralmente é o último argumento após um número X arbitrário de argumentos
  • Não consigo descobrir o tipo de retorno adequado
Expression of type "(**P@ensure_conn_decorator) -> Coroutine[Any, Any, R@ensure_conn_decorator]" is incompatible with return type "Coroutine[Any, Any, R@ensure_conn_decorator]"
  "function" is incompatible with "Coroutine[Any, Any, R@ensure_conn_decorator]"
python
  • 1 respostas
  • 125 Views
Martin Hope
zagpoint
Asked: 2025-04-09 03:07:32 +0800 CST

Como classificar versões por um atributo de membros da lista

  • 8

Estou tentando obter uma lista classificada corretamente pelo campo " nome " no exemplo de código abaixo:

---
  - hosts: localhost
    vars:
      hosts:
        - name: host2
          uptime: 1d
        - name: host10
          uptime: 45d
        - name: host1
          uptime: 3m

    tasks:
    - name: version sort host list
      debug:
        #var: hosts | community.general.version_sort
        #var: hosts | dictsort(false, 'value')
        var: hosts | sort(attribute='name')

Como você pode ver, ele não classifica os nomes de host corretamente (host2 deve vir antes de host10). Procurei o filtro version_sort, mas ele não suporta classificação por atributo. Entendo que não estaria nessa situação se os nomes de host estivessem preenchidos corretamente. Mas é o que é. Pesquisei e não vi essa pergunta. Alguma outra ideia?

TASK [version sort host list] *************************************
ok: [localhost] => {
    "hosts | sort(attribute='name')": [
        {
            "name": "host1",
            "uptime": "3m"
        },
        {
            "name": "host10",  <-------
            "uptime": "45d"
        },
        {
            "name": "host2",
            "uptime": "1d"
        }
    ]
}

Resumo :

Obrigado a @Vladimir Botka por todas as opções! Consolidei a opção nº 3 e criei o manual abaixo. Observe que atualizei a lista de dicionários para torná-la um pouco mais complexa com o FQDN. Mas a solução funciona:

- hosts: localhost

  vars:
    hosts:
      - {name: host2.example.com, uptime: 1d}
      - {name: host10.example.com, uptime: 45d}
      - {name: host1.example.com, uptime: 3m}
      - {name: host3.example.com, uptime: 3m}
      - {name: host15.example.com, uptime: 45d}
      - {name: host20.example.com, uptime: 45d}
  tasks:
#    - debug:
#        msg: 
#        - "index: {{ hosts | map(attribute='name') | community.general.version_sort }}"
#        - "host_indexed: {{ dict(hosts|json_query('[].[name,@]')) }}"
#        - "solution: {{ (hosts | map(attribute='name') | community.general.version_sort) | map('extract', dict(hosts|json_query('[].[name,@]'))) }}"
    - debug: 
        var: (hosts | map(attribute='name') | community.general.version_sort) | map('extract', dict(hosts|json_query('[].[name,@]'))) 

Aqui está o resultado:

PLAY [localhost] *****************************************************************************************************************************************
    
TASK [Gathering Facts] ***********************************************************************************************************************************
ok: [localhost]
    
TASK [debug] *********************************************************************************************************************************************
[WARNING]: Collection community.general does not support Ansible version 2.14.17
ok: [localhost] => {
    "(hosts | map(attribute='name') | community.general.version_sort) | map('extract', dict(hosts|json_query('[].[name,@]')))": [
        {
            "name": "host1.example.com",
            "uptime": "3m"
        },
        {
            "name": "host2.example.com",
            "uptime": "1d"
        },
        {
            "name": "host3.example.com",
            "uptime": "3m"
        },
        {
            "name": "host10.example.com",
            "uptime": "45d"
        },
        {
            "name": "host15.example.com",
            "uptime": "45d"
        },
        {
            "name": "host20.example.com",
            "uptime": "45d"
        }
    ]
}
    
PLAY RECAP ***********************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
ansible
  • 1 respostas
  • 50 Views
Martin Hope
Oli
Asked: 2025-04-09 02:57:11 +0800 CST

Erro 405 do servidor Python Flask para um caminho específico quando hospedado no Azure, funciona bem localmente

  • 6

Estou desenvolvendo um aplicativo Flask para processar imagens enviadas de um dispositivo móvel antes de enviar os resultados de volta para o aplicativo. Implantei o aplicativo Flask com sucesso no Azure e posso confirmar que ele funciona com determinados caminhos, /testpor exemplo.

O caminho que meu aplicativo móvel usa para carregar uma imagem é /upload-data. Quando executo meu aplicativo Flask localmente no meu próprio PC e me conecto a ele, esse caminho funciona bem, aceitando a imagem carregada e retornando uma resposta.

No entanto, ao usar o aplicativo Flask implantado no Azure, a resposta que recebo /upload-dataé apenas 405 (Método não permitido).

Esta é a parte superior do meu código no meu backend Python Flask:

@app.route("/upload-data", methods=['POST'])
def store_data():
    #Image processing code etc...

E é assim que eu faço o post para o caminho acima no meu aplicativo Java Android com OkHTTP:

private void uploadData(String imagePath, String pointCloudPath) {
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .readTimeout(responseTimeOut, TimeUnit.SECONDS)
                .build();
        File imageFile = new File(imagePath);

        //Create request body
        RequestBody requestBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("image", imageFile.getName(),
                        RequestBody.create(imageFile, MediaType.parse("image/jpeg")))
                .build();

        //Create request itself
        String url = "http://" + backendUrl;
        Request request = new Request.Builder()
                .url(url+"/upload-data")
                .post(requestBody)
                .build();

        //Execute request in background
        Log.d("OkHTTP Image Upload", "Creating image upload request to: " + request.url());
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
                e.printStackTrace();
                Log.e("OkHTTP Image Upload", "Failed: " + e.getMessage());
                runOnUiThread(() -> textStatus.setText("Request Failed: " + e.getMessage()));
            }
            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) {
                if (response.isSuccessful()) {
                    Log.d("OkHTTP Upload", "Success");
                    InputStream responseZipStream = response.body().byteStream();
                    runOnUiThread(() -> processAnalysisResponse(responseZipStream));
                }
                else {
                    Log.e("OkHTTP Image Upload", "Error: "+response.code());
                    runOnUiThread(() -> textStatus.setText("Request Error: "+response.code()));
                }
            }
        });
    }
  • 1 respostas
  • 96 Views
Martin Hope
Phoebe
Asked: 2025-04-09 01:31:31 +0800 CST

Como transformar um vetor parcialmente nomeado em uma matriz/quadro de dados com os mesmos nomes de colunas em R?

  • 7

Tenho um vetor no qual apenas alguns elementos são nomeados. Como podemos transformá-lo em uma matriz ou em um dataframe que salve esses nomes e deixe os elementos sem nome como estão? Por exemplo, myvec tem 10 elementos e apenas 6 números (os três últimos dos 5 números) têm nomes acima deles.

                             n1          n2         n3                                        
1.29258297  0.68706142  0.70861652 -1.13494695 -0.26373635  0.29306389  0.65264213
     n1          n2          n3
-0.07332781 -0.23717912  0.38339900

Se eu transformar myvec em uma matriz ou dataframe com 2 linhas e 5 colunas, quero que as últimas 3 colunas sejam nomeadas com n1, n2 e n3. Como podemos fazer isso em R?

  • 5 respostas
  • 111 Views
Martin Hope
Max Taggart
Asked: 2025-04-09 01:18:52 +0800 CST

Compreendendo a saída do GDB - Conteúdo de memória

  • 9

Estou depurando uma falha de segmentação em um programa em C++, mas primeiro estou tentando entender melhor como usar o comando gdbpara inspecionar o layout da memória no arquivo principal, produzido quando o processo sofre uma falha de segmentação. Estou usando o seguinte programa de brinquedo, que sofre uma falha de segmentação intencional, para entender gdbmelhor a saída do .

int main() {
    int a = 4;
    int b = 12;
    *(int *)0 =11;
    return a + b;
}

Quando abro o arquivo principal (usando gdb my_executable path/to/core.pid), posso ver os endereços de memória que contêm os valores de ae b, o que faz sentido, já que sizeof(int) == 4:

(gdb) p &a
$5 = (int *) 0x7ffff940e078
(gdb) p &b
$6 = (int *) 0x7ffff940e07c

E quando pergunto pelo conteúdo da memória começando por &aisso, até que faz sentido, exceto que estou em uma máquina Intel, que deveria ser little endian, e parece que esses inteiros são big endian:

(gdb) x/4x &a
0x7ffff940e078: 0x00000004      0x0000000c      0xf940e120      0x00007fff
# (added by me) ---a==4---      --b==12---      other stuff ->

Então, se eu perguntar o conteúdo da memória começando no próximo endereço, eu esperaria o seguinte (todos os bytes se deslocam um para a esquerda):

(gdb) x/4x 0x7ffff940e079
0x7ffff940e079: 0x00000400      0x00000cf9      0x40e12000      0x007fff..

Mas o que gdbrealmente imprime é isto:

(gdb) x/4x 0x7ffff940e079
0x7ffff940e079: 0x0c000000      0x20000000      0xfff940e1      0xca00007f
#               --b==12?--      other stuff ->

Parece que avançamos 7 bytes, ou 4 bytes, e agora bé little endian. Mas a memória depois desse primeiro 0x0cbyte é diferente do que era no último comando (antes era, 0xf940e...agora é 0x2000...). Será que estou lendo a memória acidentalmente com alinhamento diferente? E alguém sabe por que os valores parecem ser big endian?

Estou compilando o código com g++a versão 13.3.0 no Ubuntu 24.04, caso isso ajude.

c++
  • 1 respostas
  • 77 Views
Martin Hope
Phoebe
Asked: 2025-04-09 00:45:31 +0800 CST

Como deslistar uma lista de listas e fornecer duas saídas em R

  • 10

Eu tenho uma lista de listas chamada mylist. No exemplo a seguir, mylist tem duas listas, cada uma contendo outras duas listas de números aleatórios.

mylist <- list()
list1 <- rnorm(100)
list2 <- rnorm(100)
list3 <- rnorm(100)
list4 <- rnorm(100)

mylist[[1]] <- list("list1" = list1, "list2" = list2)
mylist[[2]] <- list("list1" = list3, "list2" = list4)  

Ao imprimir o mylist, ele deve nos dar algo como

[[1]]
[[1]]$list1
  [1]  0.0382233645  0.2416676908  1.1910173996  0.7833025597 -0.7144370041
  [6]  1.9762077872  0.9438593806  0.1590264664 -0.5323112247  1.2820246358...
[[1]]$list2
  [1] -0.084982839 -0.462448106  0.771458598  1.354049503 -1.616381590 -0.368789648
  [7] -0.678521566 -0.340799431 -0.441370037 -0.212117105 -0.921661840  0.893550382...
[[2]]
[[2]]$list1
  [1]  0.367971534  0.028976364  1.391761655 -0.033661646  1.196138270 -1.645738949
  [7]  0.086037770  0.530143788  0.639389906  2.193683933 -1.427285285  0.430282258...
[[2]]$list2
  [1]  0.235027959  2.110340896 -0.951831561 -1.510063739 -0.007402732 -0.575736079
  [7] -0.363731268  1.232404358 -0.848716435  1.217101680 -0.014577878  0.440142686...

Quero remover a listagem de mylist para que os resultados finais (res) produzam dois elementos. O primeiro elemento combinará todos os elementos disponíveis da lista1 e o segundo agregará todos os elementos disponíveis da lista2. Os resultados finais devem ser semelhantes a

res$list1
[1]  0.0382233645  0.2416676908  1.1910173996  0.7833025597 -0.7144370041
[6]  1.9762077872  0.9438593806  0.1590264664 -0.5323112247  1.2820246358...
[101]  0.367971534  0.028976364  1.391761655 -0.033661646  1.196138270 -1.645738949
[107]  0.086037770  0.530143788  0.639389906  2.193683933 -1.427285285  0.430282258...

res$list2
[1]  0.367971534  0.028976364  1.391761655 -0.033661646  1.196138270 -1.645738949
[7]  0.086037770  0.530143788  0.639389906  2.193683933 -1.427285285  0.430282258...
[101]  0.235027959  2.110340896 -0.951831561 -1.510063739 -0.007402732 -0.575736079
[107] -0.363731268  1.232404358 -0.848716435  1.217101680 -0.014577878  0.440142686...

Qual é a maneira correta de fazer isso em R? Obrigado!

  • 4 respostas
  • 91 Views
Martin Hope
InfiniteVoid
Asked: 2025-04-09 00:26:48 +0800 CST

Electron-vite + React + Tailwindcss v4

  • 6

Tenho o tailwindcss v4 para funcionar com outros aplicativos como um plugin vite no vite.config.tsarquivo.

Semelhante a isto:

import { defineConfig } from "vite";
import tailwindcss from "@tailwindcss/vite";
export default defineConfig({
  plugins: [
    tailwindcss(),
  ],
});

Não tenho certeza se essa é a abordagem correta ao usar electron-vite, pois todas as abordagens que tentei não funcionam.

Minha electron-viteconstrução é

npm create @quick-start/electron@latest
✔ Select a framework: › react
✔ Add TypeScript: …  / Yes
✔ Add Electron updater plugin: …  / Yes
✔ Enable Electron download mirror proxy: …  / Yes

Removi todos os arquivos /assetse adicionei um único global.cssque contém:

@import "tailwindcss";

Estou recebendo o erroCannot find module '@tailwindcss/vite' or its corresponding type declarations.


import tailwindcss from '@tailwindcss/vite'

Meu electron.vite.config.tsarquivo se parece com isso

import { resolve } from 'path'
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'

export default defineConfig({
  main: {
    plugins: [externalizeDepsPlugin()]
  },
  preload: {
    plugins: [externalizeDepsPlugin()]
  },
  renderer: {
    resolve: {
      alias: {
        '@renderer': resolve('src/renderer/src')
      }
    },
    plugins: [react(), tailwindcss()]
  }
})

Já tentei usar um postcss.config.js. Mas na versão 4 deve ser tão fácil quanto o descrito no blog tailwindcss-v4 :

npm i tailwindcss @tailwindcss/postcss;
export default {
  plugins: ["@tailwindcss/postcss"],
};
@import "tailwindcss";

Ainda não encontrei nenhuma documentação sobre isso. Alguém tem uma solução?

reactjs
  • 1 respostas
  • 30 Views
Martin Hope
Humberto
Asked: 2025-04-09 00:25:46 +0800 CST

Crie um suplemento básico de conteúdo da Web sem o Visual Studio e uma máquina Windows

  • 5

Estou tentando desenvolver um suplemento de conteúdo seguindo a documentação oficial . A seção de implementação afirma que apenas algumas alterações são necessárias:

  • Para o elemento OfficeApp, defina o atributo xsi:type como "ContentApp".
  • No DefaultSettingselemento, adicione os elementos RequestedHeighte RequestedWidth.

Na mesma seção, estão listados dois suplementos básicos baseados em conteúdo para PowerPoint e Excel, mas, infelizmente, eles são voltados para o Visual Studio e eu não tenho uma máquina Windows. Há também uma referência a um exemplo de 9 anos chamado Excel-Content-Add-in-Humongous-Insurance , cujo manifesto parece bastante desatualizado.

Decidi experimentar usar o Yeoman e o VScode. Como o yo officeescritório não oferece um starter para o Add-in baseado em conteúdo, optei por usar:

? Choose a project type: Office Add-in Task Pane project using React framework
? Choose a script type: TypeScript
? What do you want to name your add-in? my-content-addin
? Which Office client application would you like to support? Powerpoint

Seguindo a documentação listada acima, alterei o xsi:typedo OfficeAppelemento para o ContentAppe adicionei os elementos RequestedHeighte RequestedWidthao DefaultSettingselemento.

Além disso, notei que o manifesto Excel-Content-Add-in-Humongous-Insurance não tinha o seguinte esquema no OfficeApp:

xmlns:ov="http://schemas.microsoft.com/office/taskpaneappversionoverrides"

Verifiquei o repositório office-addin-manifest e não consegui encontrar uma alternativa para suplementos de conteúdo, por exemplo, .../contentappversionoverrides. Encontrei apenas um .../mailappversionoverrides.

Também notei que o manifesto Excel-Content-Add-in-Humongous-Insurance não tinha esse VersionOverrideselemento, então o removi do meu arquivo gerado manifest.xml. Então, terminei com:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OfficeApp 
  xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0" 
  xsi:type="ContentApp">
  <Id>9e2e38ec-67af-43e6-8aeb-c8c3e22b86bd</Id>
  <Version>1.0.0.0</Version>
  <ProviderName>Contoso</ProviderName>
  <DefaultLocale>en-US</DefaultLocale>
  <DisplayName DefaultValue="my-content-addin"/>
  <Description DefaultValue="A template to get started."/>
  <IconUrl DefaultValue="https://localhost:3000/assets/icon-32.png"/>
  <HighResolutionIconUrl DefaultValue="https://localhost:3000/assets/icon-64.png"/>
  <SupportUrl DefaultValue="https://www.contoso.com/help"/>
  <AppDomains>
    <AppDomain>https://www.contoso.com</AppDomain>
  </AppDomains>
  <Hosts>
    <Host Name="Presentation"/>
  </Hosts>
  <DefaultSettings>
    <SourceLocation DefaultValue="https://localhost:3000/taskpane.html"/>
    <RequestedHeight>400</RequestedHeight>
    <RequestedWidth>400</RequestedWidth>
  </DefaultSettings>
  <Permissions>ReadWriteDocument</Permissions>
</OfficeApp>

Depois disso, tentei validar o manifesto e recebi estes erros:

Error #1: 
XML Schema Validation Error: Error found during XML Schema validation.
  - Details: The element 'DefaultSettings' in namespace 'http://schemas.microsoft.com/office/appforoffice/1.1' has invalid child element 'RequestedWidth' in namespace 'http://schemas.microsoft.com/office/appforoffice/1.1'.
  - Line: 25
  - Column: 6

Error #2: 
XML Schema Violation: Your manifest does not adhere to the current set of XML schema definitions for Office Add-in manifests.

Removi o módulo " , RequestedWidthembora pareça conhecido " , e tentei novamente. Desta vez, o manifesto era válido. Então, executei e meu suplemento foi adicionado ao slide atual automaticamente.manifestHandlerXml.tsoffice-addin-manifestnpm start

Este é meu manifest.xml final

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OfficeApp 
  xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0" 
  xsi:type="ContentApp">
  <Id>9e2e38ec-67af-43e6-8aeb-c8c3e22b86bd</Id>
  <Version>1.0.0.0</Version>
  <ProviderName>Contoso</ProviderName>
  <DefaultLocale>en-US</DefaultLocale>
  <DisplayName DefaultValue="my-content-addin"/>
  <Description DefaultValue="A template to get started."/>
  <IconUrl DefaultValue="https://localhost:3000/assets/icon-32.png"/>
  <HighResolutionIconUrl DefaultValue="https://localhost:3000/assets/icon-64.png"/>
  <SupportUrl DefaultValue="https://www.contoso.com/help"/>
  <AppDomains>
    <AppDomain>https://www.contoso.com</AppDomain>
  </AppDomains>
  <Hosts>
    <Host Name="Presentation"/>
  </Hosts>
  <DefaultSettings>
    <SourceLocation DefaultValue="https://localhost:3000/taskpane.html"/>
    <RequestedHeight>400</RequestedHeight>
  </DefaultSettings>
  <Permissions>ReadWriteDocument</Permissions>

</OfficeApp>

Como posso especificar uma largura padrão para meu suplemento de conteúdo?

Como posso inserir meu suplemento somente quando clico em um comando da Faixa de Opções, como a demonstração padrão do Painel de Tarefas, que abre o painel de tarefas?

Na demonstração do Yeoman Taskpane, VersionOverridesé necessário um esquema xmlns="http://schemas.microsoft.com/office/taskpaneappversionoverrides". Qual seria a alternativa para o Controlelemento de ação: <Action xsi:type="ShowTaskpane">em um suplemento baseado em conteúdo?

insira a descrição da imagem aqui

office-js
  • 1 respostas
  • 20 Views
Martin Hope
ERTY
Asked: 2025-04-09 00:17:48 +0800 CST

Atraso na exibição da TabBar ao usar a barra de ferramentas (.hidden, para: .tabBar)

  • 6

Eu uso o modificador toolbar(.hidden, for: .tabBar) para ocultar a barra de abas na NotificationSettingScreen. Quando navego de volta, o SwiftUI demora um pouco para renderizar a barra de abas novamente, causando o atraso na exibição da barra. Como fazer com que ela seja exibida instantaneamente?

struct NotificationMenuButton: View {
    var body: some View {
        Menu {
            NavigationLink(
                destination: NotificationSettingScreen()
                    .toolbar(.hidden, for: .tabBar)
            ) {
                Text("Notification Settings")
            }
        } label: {
            Label("Options", systemImage: "ellipsis.circle")
        }
    }
}
struct NotificationScreen: View {
    @EnvironmentObject private var notificationVM: NotificationViewModel

    var body: some View {
        NavigationStack {
            NotificationMenuButton()
        }
    }
}

import SwiftUI

struct MainScreen: View {
    @State private var selectedTabIdx = 1

    var body: some View {
        TabView(selection: $selectedTabIdx) {
            NotificationScreen()
                .tabItem {
                    Label(
                        "Notifications",
                        systemImage: hasUnreadNotifications
                            ? "bell.badge.fill"
                            : "bell"
                    )
                }
                .tag(1)

        }
    }
}

  • 1 respostas
  • 23 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve